3

Я делаю пользовательский segue, который исчезает до черного цвета, сворачивает контроллер вида и затем исчезает до прозрачного. К сожалению, я не могу заставить это сделать это. Вот код:Анимация альфа на UIView не работает

- (void)perform { 

    UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [self.sourceViewController navigationController].view.frame.size.width, [self.sourceViewController navigationController].view.frame.size.height)]; 
    [overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.0]]; 
    [[self.sourceViewController navigationController].view addSubview:overlay]; 

    [UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{ 
     [overlay setAlpha:1.0]; 
    }completion:^(BOOL finished) { 
     [[self.sourceViewController navigationController] pushViewController:[self destinationViewController] animated:NO]; 
     [UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{ 
     [overlay setAlpha:0.0]; 
     }completion:^(BOOL finished) { 
     [overlay removeFromSuperview]; 
     NSLog(@"Done!"); 
     }]; 
    }]; 

} 

Итак, что я сделал, это добавить UIView в контроллер навигации, который имеет черный фон и альфа 0. Тогда, я делаю анимацию, чтобы изменить альфа 1, нажмите контроллер точки назначения на контроллер навигации, а затем оставьте его назад, чтобы очистить. Когда я это делаю, ничего не происходит. Он просто отключает контроллер вида назначения на контроллер навигации без какой-либо анимации.

Странно, если я начинаю с альфы 1 и анимировать до 0, а затем обратно в 1, она работает (но это не то, что я хочу).

Я думаю, что есть какая-то оптимизация, которая исключает мой ясный UIView, и поэтому изменение прозрачности бессмысленно.

ответ

2

Что произойдет, если вы сделаете это?

... 
[overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]]; 
[overlay setAlpha:0.0]; 
[[self.sourceViewController navigationController].view addSubview:overlay]; 
... 
+0

Это работает! Но почему?? –

+1

@JonA, вы анимировали альфа на вид, а не цвет фона. Таким образом, вам необходимо установить цвет фона непрозрачным и начать с альфы на представлении как прозрачный. –

+0

О, конечно. Сегодня не нужно стрелять по всем цилиндрам. Благодарим вас за продолжение. –

Смежные вопросы