zoukankan      html  css  js  c++  java
  • 动画(转)

    IOS中的动画有两大类1.UIView的视图动画2.Layer的动画 UIView的动画也是基于Layer的动画

    动画的代码格式都很固定

     

    1.UIView动画

     

    一般方式

    [UIView beginAnimations:@"ddd" context:nil];//设置动画
    [UIView commitAnimations]; //提交动画
    这两个是必须有的,然后在两句的中间添加动画的代码

     

    [UIView beginAnimations:@"ddd" context:nil];//设置动画 ddd为动画名称

    [UIView setAnimationDuration:3];//定义动画持续时间

    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //setAnimationCurve来定义动画加速或减速方式

    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES];

    //设置动画的样式  forView为哪个view实现这个动画效果

    [UIView setAnimationDelay:3]; //设置动画延迟多久执行

    [UIView setAnimationDelegate:self];  //设置动画的代理 实现动画执行前后的方法 在commitAnimation之前设置

    [UIView setAnimationDidStopSelector:@selector(stop)];//设置动画结束后执行的方法

    [UIView setAnimationWillStartSelector:@selector(star)];//设置动画将要开始执行的方法

    [UIView commitAnimations]; //提交动画

    typedef enum {
            UIViewAnimationTransitionNone,  //普通状态
            UIViewAnimationTransitionFlipFromLeft,  //从左往右翻转
            UIViewAnimationTransitionFlipFromRight,  //从右往左翻转
            UIViewAnimationTransitionCurlUp, //向上翻页
            UIViewAnimationTransitionCurlDown, //向下翻页
        } UIViewAnimationTransition;

    typedef enum {
            UIViewAnimationCurveEaseInOut,         
            UIViewAnimationCurveEaseIn,            
            UIViewAnimationCurveEaseOut,           
            UIViewAnimationCurveLinear
        } UIViewAnimationCurve;

     

    [UIView beginAnimations:@"ddd" context:nil]; //设置动画

    view.frame = CGRectMake(200, 200, 100, 100);

    [UIView commitAnimations]; //提交动画

    当view从本来的frame移动到新的frame时会慢慢渐变 而不是一下就完成了 中间也可以添加到上面那段中间 只是多种效果重叠

     

    以下这些也可以加到  [UIView beginAnimations:@"ddd" context:nil]; [UIView commitAnimations];之间

     

    view.transform = CGAffineTransformMakeTranslation(10, 10);//设置偏移量 相对于最初的 只能偏移一次

    view.transform = CGAffineTransformTranslate(view.transform, 10, 10); //设置偏移量 偏移多次

     

    self.view.transform = CGAffineTransformMakeRotation(M_PI);//设置旋转度 只能旋转一次

    self.view.transform = CGAffineTransformRotate(self.view.transform, M_PI); //旋转多次

     

    self.view.transform = CGAffineTransformMakeScale(1.1, 1.1); //设置大小 只能改变一次 数值时相对于本来的几倍

    self.view.transform = CGAffineTransformScale(self.view.transform, 1.1, 1.1);//改变多次

    self.view.transform = CGAffineTransformIdentity;//回到当初的样子 执行一次
    self.view.transform = CGAffineTransformInvert(self.view.transform);//得到相反的样子 大小 方向 位置执行多次

     

    Block方式

    [UIView animateWithDuration:3 animations:^(void){
                

          //这里相当于在begin和commint之间
        }completion:^(BOOL finished){

             //这里相当于动画执行完成后要执行的方法,可以继续嵌套block

        }];

     

    2.CAAnimation

    需要添加库,和包含头文件

     

    caanimation有多个子类

     

    CABasicAnimation

     

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];

    //@""里的字符串有多种,可以自己找相关资料,一定要填对,动画才会执行 opacity设置透明度 bounds.size设置大小

    [animation setFromValue:[NSNumber numberWithFloat:1.0]]; //设置透明度从几开始

    [animation setToValue:[NSNumber numberWithFloat:0.3]];//设置透明度到几结束

    [animation setDuration:0.1]; //设置动画时间

    [animation setRepeatCount:100000];//设置重复时间

    [animation setRepeatDuration:4];  //会限制重复次数

    [animation setAutoreverses:NO];//设置是否从1.0到0.3 再从0.3到1.0 为一次  如果设置为NO则 1.0到0.3为一次

    [animation setRemovedOnCompletion:YES]; //完成时移出动画 默认也是

    [view.layer addAnimation:animation forKey:@"abc"];//执行动画

     

    CAKeyframeAnimation

     

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];//设置view从初始位置经过一系列点

    NSArray *postionAraay = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:CGPointMake(100, 20)], [NSValue valueWithCGPoint:CGPointMake(40, 80)],[NSValue valueWithCGPoint:CGPointMake(30, 60)],[NSValue valueWithCGPoint:CGPointMake(20, 40)],[NSValue valueWithCGPoint:CGPointMake(0, 100)],nil];//设置点
        

    NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.3],[NSNumber numberWithFloat:0.5],[NSNumber numberWithFloat:0.6],[NSNumber numberWithFloat:0.1],[NSNumber numberWithFloat:1.0], nil];  //设置移动过程的时间

    [animation setKeyTimes:times];

    [animation setValues:postionAraay];

    [animation setDuration:5]; //设置动画时间

    [bigImage.layer addAnimation:animation forKey:@"dd"]; //执行动画

    CATransition

     

    CATransition *animation = [CATransition animation];

    animation.duration = 0.5f;

    animation.timingFunction = UIViewAnimationCurveEaseInOut;

    animation.fillMode = kCAFillModeForwards;
        /*
         kCATransitionFade;
         kCATransitionMoveIn;
         kCATransitionPush;
         kCATransitionReveal;
         */
        /*
         kCATransitionFromRight;
         kCATransitionFromLeft;
         kCATransitionFromTop;
         kCATransitionFromBottom;
         */

    animation.type = kCATransitionPush;

    animation.subtype = kCATransitionFromBottom;

    [view.layer addAnimation:animation forKey:animation];

    type也可以直接用字符串

    /*
         cube
         suckEffect 卷走
         oglFlip    翻转
         rippleEffect  水波
         pageCurl   翻页
         pageUnCurl
         cameraIrisHollowOpen
         cameraIrisHollowClose

    */

  • 相关阅读:
    JavaScript基础1
    iOS开发之Quzrtz2D 一:认识Quzrtz2D
    ios开发抽屉效果的封装使用
    ios开发手势处理之手势识别二
    ios开发之手势处理 之手势识别一
    ios开发事件处理之 四:hittest方法的底层实现与应用
    ios开发事件处理之:三 :寻找最合适的view
    ios开发事件处理之 :二:事件的产生与传递
    ios开发事件处理之:一:UIView的拖拽
    ios开发transform属性
  • 原文地址:https://www.cnblogs.com/hereiam/p/3813846.html
Copyright © 2011-2022 走看看