首页 > 代码库 > UIView动画

UIView动画

一、基础动画:

(1)、Block方式:

    [UIView animateWithDuration:3.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
        _imgView.center=location;
    } completion:^(BOOL finished) {
        NSLog(@"Animation.end");
    }];

(2)、静态方式:

//方法2:静态方法:
    [UIView beginAnimations:@"KCBasicAnimation" context:nil];
    [UIView setAnimationDuration:3.0];
    [UIView setAnimationDelay:1.0];//设置延迟
    [UIView setAnimationRepeatAutoreverses:NO];//是否回复
    [UIView setAnimationRepeatCount:10];//重复次数
    [UIView setAnimationStartDate:(NSDate *)];//设置动画开始运行的时间
    [UIView setAnimationDelegate:self];//设置代理
    [UIView setAnimationWillStartSelector:(SEL)];//设置动画开始运动的执行方法
    [UIView setAnimationDidStopSelector:(SEL)];//设置动画运行结束后的执行方法
    
    _imgView.center=location;
    
    //开始动画
    [UIView commitAnimations];
(3)、新增弹簧效果动画:

    [UIView animateWithDuration:5.0 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:1.0 options:UIViewAnimationOptionOverrideInheritedCurve animations:^{
        _imgView.center=location;
    } completion:nil];

(4)、options:

/*
    1.常规动画属性设置(可以同时选择多个进行设置)
    
    UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动。
    
    UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互。
    
    UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行。
    
    UIViewAnimationOptionRepeat:重复运行动画。
    
    UIViewAnimationOptionAutoreverse :动画运行到结束点后仍然以动画方式回到初始点。
    
    UIViewAnimationOptionOverrideInheritedDuration:忽略嵌套动画时间设置。
    
    UIViewAnimationOptionOverrideInheritedCurve:忽略嵌套动画速度设置。
    
    UIViewAnimationOptionAllowAnimatedContent:动画过程中重绘视图(注意仅仅适用于转场动画)。
    
    UIViewAnimationOptionShowHideTransitionViews:视图切换时直接隐藏旧视图、显示新视图,而不是将旧视图从父视图移除(仅仅适用于转场动画)
    UIViewAnimationOptionOverrideInheritedOptions :不继承父动画设置或动画类型。
    
    2.动画速度控制(可从其中选择一个设置)
    
    UIViewAnimationOptionCurveEaseInOut:动画先缓慢,然后逐渐加速。
    
    UIViewAnimationOptionCurveEaseIn :动画逐渐变慢。
    
    UIViewAnimationOptionCurveEaseOut:动画逐渐加速。
    
    UIViewAnimationOptionCurveLinear :动画匀速执行,默认值。
    
    3.转场类型(仅适用于转场动画设置,可以从中选择一个进行设置,基本动画、关键帧动画不需要设置)
    
    UIViewAnimationOptionTransitionNone:没有转场动画效果。
    
    UIViewAnimationOptionTransitionFlipFromLeft :从左侧翻转效果。
    
    UIViewAnimationOptionTransitionFlipFromRight:从右侧翻转效果。
    
    UIViewAnimationOptionTransitionCurlUp:向后翻页的动画过渡效果。
    
    UIViewAnimationOptionTransitionCurlDown :向前翻页的动画过渡效果。
    
    UIViewAnimationOptionTransitionCrossDissolve:旧视图溶解消失显示下一个新视图的效果。
    
    UIViewAnimationOptionTransitionFlipFromTop :从上方翻转效果。   
    
    UIViewAnimationOptionTransitionFlipFromBottom:从底部翻转效果。
    */

二、关键帧动画:
    //关键帧动画
    [UIView  animateKeyframesWithDuration:5.0 delay:0 options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionCurveLinear animations:^{
       [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
           _imgView.center=CGPointMake(80.0, 220.0);
       }];
       [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
            _imgView.center=CGPointMake(45.0, 300.0);
       }];
        [UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.25 animations:^{
            _imgView.center=CGPointMake(55.0, 400);
        }];
    } completion:^(BOOL finished) {
        NSLog(@"Animation end.");
    }];

三、转场动画:

    [UIView transitionWithView:_imgView duration:1.0 options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionTransitionFlipFromLeft animations:^{
        _imgView.backgroundColor=[UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
    } completion:nil];
如果有两个完全不同的视图,并且每个视图布局都很复杂,此时要在这两个视图之间进行转场可以使用+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0)方法进行两个视图间的转场,需要注意的是默认情况下转出的视图会从父视图移除,转入后重新添加,可以通过UIViewAnimationOptionShowHideTransitionViews参数设置,设置此参数后转出的视图会隐藏(不会移除)转入后再显示。

UIView动画