#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. хе-хе, не беспокойтесь, я просто прочитал и увидел, что никто ничего не опубликовал в вашем комментарии