iPhone UIView анимация Лучшая практика

голоса
140

Что считается лучшей практикой для анимации вида переходов на iPhone?

Например, ViewTransitionsобразец проект из яблока использует код , как:

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];

Каков наилучший подход? Если бы вы могли предоставить фрагмент кода, а это было бы очень высокую оценку.

Примечание: Я не смог получить второй подход , чтобы работать правильно.

Задан 10/03/2009 в 14:52
источник пользователем
На других языках...                            


9 ответов

голоса
117

Из UIView опорной секции «s о beginAnimations:context:методе:

Использование этого метода не рекомендуется в iPhone OS 4.0 и выше. Вы должны использовать блочные методы, основанные на анимации вместо этого.

Например, из блоков на основе анимации на основе комментарий Тома

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Ответил 09/08/2010 в 16:02
источник пользователем

голоса
69

Я использую последний для многого хорошей легкой анимации. Вы можете использовать его кроссфейд два вида, или исчезать один в перед другим, или исчезать его. Вы можете снимать вид на другой , как знамя, вы можете сделать вид растягиваться или сжиматься ... Я получаю много пробег из 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];

Как вы можете видеть, вы можете играть с альфа, кадров и даже размеров зрения. Поиграйте. Вы можете быть удивлены, с его возможностями.

Ответил 04/05/2009 в 09:22
источник пользователем

голоса
52

Разница, кажется, уровень контроля нужно над анимацией.

CATransitionПодход дает больше контроля и , следовательно , больше вещей , чтобы установить, например. функция времени. Будучи объектом, вы можете сохранить его для последующего использования , реорганизовать , чтобы указать все ваши анимации на него , чтобы уменьшить дублирование кода и т.д.

В UIViewметодах класса являются удобными методами для общих анимации, но более ограничены , чем CATransition. Например, есть только четыре возможных типов переходов (флип слева, флип правой, свернуться, скручиваться вниз). Если вы хотите сделать нарастающее, вам придется либо докопаться до CATransition'sвыцветаете переход, или установить явную анимацию вашего UIViewрусского альфа.

Обратите внимание , что CATransitionна Mac OS X позволит вам указать произвольный CoreImageфильтр для использования в качестве перехода, но , как она стоит сейчас , вы не можете сделать это на iPhone, который испытывает недостаток CoreImage.

Ответил 10/03/2009 в 16:24
источник пользователем

голоса
26

Мы можем анимировать изображения в ИО 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!");
    }];
Ответил 20/01/2012 в 10:10
источник пользователем

голоса
8

В UIViewдокументации, имеют прочитать об этой функции для iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Ответил 11/10/2011 в 11:19
источник пользователем

голоса
6

В любом случае метод «Блок» является теперь предпочитал-дни. Я объясню простой блок ниже.

Рассмотрим отрезала ниже. bug2 и ошибка 3 являются imageViews. Ниже анимация описывает анимацию с 1 второй длительностью после задержки в 1 секунду. Bug3 перемещается от его центра до центра bug2 в. После того, как анимация завершена он будет зарегистрирован «Центр анимация Готова!».

-(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!");
                 }];
}

Надеюсь, что это чистый !!!

Ответил 08/03/2012 в 05:12
источник пользователем

голоса
4

Я нашел хороший учебник по этой ссылке. Надеюсь, что это будет полезно для некоторого одного.

UIView-анимация-учебник

Ответил 05/10/2012 в 08:08
источник пользователем

голоса
2

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

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.
Ответил 03/07/2013 в 08:19
источник пользователем

голоса
1

давайте пробуем и фотографии для Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Ответил 15/03/2017 в 12:50
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more