美文网首页iOS动画
华山论剑之iOS动画

华山论剑之iOS动画

作者: 神经骚栋 | 来源:发表于2016-02-04 14:41 被阅读215次

    你要搞清楚自己人生的剧本——不是你父母的续集,不是你子女的前传,更不是你朋友的外篇。 --栋哥


    做了这么长时间的iOS的开发,越来越发现一个问题,那就是iOS的动画的问题,一个好的APP一定要有一个完美的UI界面和使人们舒服的动画效果,但是前几次我所负责的项目所做的动画效果并不能是我满意,因为APP中的controller的跳转还有一些效果都没有达到预期的效果程度,今天接着这篇文章,我就说一说关于动画的一些事情.

    在iOS当中,很多的属性可是设置动画效果,比如backgroundColor,bounds,frames,今天就从三个方面来说一下这个动画 分别是UIView动画,CALayer动画,转场动画.
    我们动画的效果把.


    图画的旋转.
    1.UIView动画

    1.1动画代理方法效果的演示,

     -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //首尾式动画
      [UIView beginAnimations:nil context:nil];
     //执行动画 //设置动画执行时间
     [UIView setAnimationDuration:2.0]; //设置代理
      [UIView setAnimationDelegate:self];
    //设置动画执行完毕调用的事件
     [UIView setAnimationDidStopSelector:@selector(didStopAnimation)];
    self.customView.center=CGPointMake(200, 300);
     [UIView commitAnimations];
    }
    

    我们把动画效果放在一个button的事件当中,在上面的方法当中,我们需要把无们所需要做的动画效果放在beginAnimations和commitAnimations两个方法当中,比如设置动画的事件 ,设置动画的代理.

    1.2动画的block块模式(包含转场动画)

    + (void)**transitionFromView:(UIView *)fromView  toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions*)options  completion:(void (^)(BOOL finished))completion
    

    上面的方法是我们最常用的block动画方法,也是我们的转场动画,在这个方法当中 ,我们可以指定从哪一个页面跳转到那一个页面.还可以设置下面的一些属性.
    duration:动画的持续时间
    options:转场动画的类型
    animations:将改变视图属性的代码放在这个block中
    completion:动画结束后,会自动调用这个block

    2.CALayer动画

    关于CALayer动画和UIView动画相似,但是也是有区别的
    UIView封装的动画执行完毕之后不会反弹。即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的。

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     //1.创建核心动画
    CABasicAnimation *anima=[CABasicAnimation animation];
    //平移
     anima.keyPath=@"position";
     //设置执行的动画
     anima.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 300)];
     //设置执行动画的时间
     anima.duration=2.0;
     //设置动画执行完毕之后不删除动画
     anima.removedOnCompletion=NO;
     //设置保存动画的最新状态
     anima.fillMode=kCAFillModeForwards;
     // anima.fillMode=kCAFillModeBackwards;
     //设置动画的代理
    anima.delegate=self;
    //2.添加核心动画
     [self.customView.layer addAnimation:anima forKey:nil];
    

    CALayer动画代理方法如下

    -(void)animationDidStart:(CAAnimation *)anim {
    //打印动画块的位置
    NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint(self.customView.center));
    NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint( self.customView.layer.position));
     }
     -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    //打印动画块的位置
    NSLog(@"动画执行完毕后的位置:%@",NSStringFromCGPoint( self.customView.layer.position));
     }
    

    注意:keyPath有一些动画是iOS内部动画,不能使用..

    今天的动画就到这了~

    相关文章

      网友评论

        本文标题:华山论剑之iOS动画

        本文链接:https://www.haomeiwen.com/subject/ygnjkttx.html