Анимация двух представлений, например, при передаче телефонного вызова

#iphone #cocoa-touch #animation #uiview #core-animation

#iPhone #cocoa-touch #Анимация #uiview #ядро-анимация

Вопрос:

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

Я не могу добиться такого эффекта, это всегда так себе. Кажется, есть эффект масштабирования с действием на непрозрачность, но…

Знаете ли вы, как это можно сделать, чтобы отразить этот эффект (не так себе, у меня их много)?

Ответ №1:

  // Make this interesting.

 [UIView beginAnimations:nil context:nil];
 [UIView setAnimationDuration:2.0];
 [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];
 [UIView setAnimationDelegate:self]; 
 [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)];
 self.view.alpha = 0.0;
 self.view.frame = CGRectMake(self.view.center.x,self.view.center.y , 0, 0);
 [UIView commitAnimations];
}
  

Я надеюсь, что это основа для лучшей анимации. Это не гарантировано, но это лучшее, что я мог придумать для первой части перехода.

Это изменит рамку представления вашего view controller таким образом, что он «засасывает» себя в центр экрана, который имеет естественный черный цвет. Теперь, когда я думаю об этом, CGAffineTransform было бы намного проще…

РЕДАКТИРОВАТЬ (ради педантичности): начиная с iOS 4, теперь вы можете использовать новые и гораздо более синтаксически чистые анимационные блоки и приятное преобразование:

 [UIView animateWithDuration:0.25 delay:0.0 options:0 animations:^{
     //animate the toolbars in from the top and bottom
     [myTopView setFrame:CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44)];
     [myBottomView setFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
     //fade to black...
     self.view.alpha = 0.0;
     //and suck inwards.
     self.view.frame = CGRectMake(self.view.center.x,self.view.center.y , 0, 0);
}
completion:^{
    //do something to end nicely, or start another animation block.
}];
  

Комментарии:

1. Почему я одновременно и лучший ответ, и тот, за который проголосовали?

2. О, расслабься, друг мой. Я опубликовал это, когда был молодым. Я немедленно отредактирую его.

3. хе-хе, не беспокойтесь, я просто прочитал и увидел, что никто ничего не опубликовал в вашем комментарии