2014-10-05 3 views
1

Я создаю NSView, который выступает в качестве наложения. Я хотел бы оживить его альфа-значение от 0 до 0,5 после добавления его в качестве подсмотра другого представления. Я делаю следующее, но я никогда не вижу альфа-анимацию вида до 0,5. Я знаю, что представление было добавлено правильно, потому что я вижу его, если я установил его backgroundcolor, чтобы иметь полную альфу. Я что-то пропустил здесь?Анимация альфа-формы вида от 0 до 0,5

self.overlayView = [[MyOverlayView alloc] initWithFrame:frameRect]; 
self.overlayView.layer.backgroundColor = CGColorCreateGenericRGB(0., 0., 0., 0.0); 
[self.window.contentView addSubview:self.overlayView]; 

__typeof__(self) __weak weakSelf = self; 
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 
    context.duration = 1; 
    weakSelf.overlayView.animator.alphaValue = 0; 
} 
    completionHandler:^{ 
     weakSelf.overlayView.alphaValue = 0.5; 
}]; 

Я также пытался что-то вроде этого:

[[self.overlayView animator] setAlphaValue:1.0]; 
+0

возможно дубликат [Не можете увидеть новый подвид] (http://stackoverflow.com/questions/26203988/cant-see-a-new-subview) – cacau

+0

Это ISN» Это обман этого вопроса. Я вижу новый subview ... он просто не оживляет, как я ожидаю. – RobertJoseph

+0

просто замените эту строку [self.window.contentView addSubview: self.overlayView]; с этим [self.window.contentView.animator addSubview: self.overlayView]; анимация будет работать должным образом – Thippi

ответ

2

Вам нужно установить wantsLayer ДА. Цвет фона должен также иметь альфа 1.0, не 0.0.

self.overlayView = [[MyOverlayView alloc] initWithFrame:frameRect]; 
self.overlayView.wantsLayer=YES; 
self.overlayView.layer.backgroundColor = CGColorCreateGenericRGB(0., 0., 0., 1.0); 
[self.window.contentView addSubview:self.overlayView]; 

__typeof__(self) __weak weakSelf = self; 
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 
    context.duration = 1; 
    weakSelf.overlayView.animator.alphaValue = 0; 
} 
    completionHandler:^{ 
     weakSelf.overlayView.alphaValue = 0.5; 
}]; 
+0

Я думаю, что достаточно просто изменить цвет фона. Для отображения непрозрачности 'alphaValue' или для анимации не нужно отображать слои. –

+0

Они нуждаются в нем, если вы задаете цвет фона слоя, что он делает. Я протестировал ответ, прежде чем публиковать его. –

+0

http://interfacelab.com/client/so/BackgroundLayerTest.zip –

0

просто заменить с этой линией

[self.window.contentView addSubview: self.overlayView];

с этим

[self.window.contentView.animator addSubview: self.overlayView];

анимация будет работать должным образом