iPhone UIView анимация Лучшая практика
что считается лучшей практикой для анимации переходов просмотра на iPhone?
например,ViewTransitions
пример проекта от apple использует код типа:
CATransition *applicationLoadViewIn = [CATransition animation];
[applicationLoadViewIn setDuration:1];
[applicationLoadViewIn setType:kCATransitionReveal];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal];
но есть также фрагменты кода, плавающие вокруг сети, которые выглядят так:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
[myview removeFromSuperview];
[UIView commitAnimations];
каков наилучший подход? Если бы вы могли предоставить фрагмент, а это было бы очень ценно.
Примечание: Я не смог сделать второй подход к работе правильно.
9 ответов:
С ссылка UIView ' s раздел о
beginAnimations:context:
способ:использование этого метода не рекомендуется, в iPhone OS 4.0 и позже. Вместо этого следует использовать методы анимации на основе блоков.
например, блок-анимации на основе комментария
[UIView transitionWithView:mysuperview duration:0.75 options:UIViewAnimationTransitionFlipFromRight animations:^{ [myview removeFromSuperview]; } completion:nil];
Я использую последний для многих хороших легких анимаций. Вы можете использовать его кроссфейд два вида, или исчезать один перед другим, или исчезать его. Вы можете снимать вид над другим, как Баннер, вы можете сделать вид растянуть или уменьшить... Я получаю много пробега из
beginAnimation
/commitAnimations
.не думаю, что все, что вы можете сделать, это:
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
вот пример:
[UIView beginAnimations:nil context:NULL]; { [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.0]; [UIView setAnimationDelegate:self]; if (movingViewIn) { // after the animation is over, call afterAnimationProceedWithGame // to start the game [UIView setAnimationDidStopSelector:@selector(afterAnimationProceedWithGame)]; // [UIView setAnimationRepeatCount:5.0]; // don't forget you can repeat an animation // [UIView setAnimationDelay:0.50]; // [UIView setAnimationRepeatAutoreverses:YES]; gameView.alpha = 1.0; topGameView.alpha = 1.0; viewrect1.origin.y = selfrect.size.height - (viewrect1.size.height); viewrect2.origin.y = -20; topGameView.alpha = 1.0; } else { // call putBackStatusBar after animation to restore the state after this animation [UIView setAnimationDidStopSelector:@selector(putBackStatusBar)]; gameView.alpha = 0.0; topGameView.alpha = 0.0; } [gameView setFrame:viewrect1]; [topGameView setFrame:viewrect2]; } [UIView commitAnimations];
как вы можете видеть, вы можете играть с Альфы, рамы и даже размеры посмотреть. Манипулировать. Вы можете быть удивлены его возможностями.
разница, похоже, заключается в том, сколько контроля вам нужно над анимацией.
The
CATransition
подход дает вам больше контроля и, следовательно, больше вещей, чтобы настроить, например. функция синхронизации. Будучи объектом, вы можете сохранить его на потом, рефакторинг, чтобы указать все ваши анимации на него, чтобы уменьшить дублированный код и т. д.The
UIView
методы класса-это удобные методы для обычных анимаций, но они более ограничены, чемCATransition
. Например, их всего четыре возможные типы переходов (флип влево, флип вправо, скручивание вверх, скручивание вниз). Если вы хотите сделать затухание, вам придется либо копать доCATransition's
fade переход, или настроить явную анимацию вашегоUIView
с Альфой.отметим, что
CATransition
на Mac OS X позволит вам указать произвольныйCoreImage
фильтр для использования в качестве перехода, но как он стоит сейчас вы не можете сделать это на iPhone, который не хватаетCoreImage
.
мы можем анимировать изображения в iOS 5 с помощью этого простого кода.
CGRect imageFrame = imageView.frame; imageFrame.origin.y = self.view.bounds.size.height; [UIView animateWithDuration:0.5 delay:1.0 options: UIViewAnimationCurveEaseOut animations:^{ imageView.frame = imageFrame; } completion:^(BOOL finished){ NSLog(@"Done!"); }];
на
UIView
docs, есть прочитать об этой функции для ios4++ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
в любом случае метод" блок " предпочтен сейчас-в-дни. Я объясню простой блок ниже.
рассмотрим обрезанные ниже. bug2 и bug 3-это просмотры изображений. Приведенная ниже анимация описывает анимацию с длительностью 1 секунда после задержки в 1 секунду. Bug3 перемещается из своего центра в центр bug2. Как только анимация будет завершена, она будет зарегистрирована "Center Animation Done!".
-(void)centerAnimation:(id)sender { NSLog(@"Center animation triggered!"); CGPoint bug2Center = bug2.center; [UIView animateWithDuration:1 delay:1.0 options: UIViewAnimationCurveEaseOut animations:^{ bug3.center = bug2Center; } completion:^(BOOL finished){ NSLog(@"Center Animation Done!"); }]; }
надеюсь, что это чисто!!!
вот код для плавной анимации, может быть полезно для многих разработчиков.
Я нашел этот фрагмент кода из этого учебника.CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [animation setAutoreverses:YES]; [animation setFromValue:[NSNumber numberWithFloat:1.3f]]; [animation setToValue:[NSNumber numberWithFloat:1.f]]; [animation setDuration:2.f]; [animation setRemovedOnCompletion:NO]; [animation setFillMode:kCAFillModeForwards]; [[self.myView layer] addAnimation:animation forKey:@"scale"];/// add here any Controller that you want t put Smooth animation.