IOS动画UI层的研究

来源:互联网 发布:淘宝网皮夹克 编辑:程序博客网 时间:2024/05/20 05:28

IOS动画大概分成5部分的知识:

1:事务性动画

     写起来就像是开启一个事物一样,有事物的开始,有结束

@implementation FirstViewController


- (IBAction)commAnimation:(id)sender {

    [UIViewbeginAnimations:@"Common"context:nil];//动画事物的开始标志

    [UIViewsetAnimationDelay:1];

    [UIViewsetAnimationDuration:1.0];

    [UIViewsetAnimationDelegate:self];

    [UIViewsetAnimationRepeatCount:2];

    [UIViewsetAnimationWillStartSelector:@selector(startAni:)];

    [UIViewsetAnimationDidStopSelector:@selector(stopAni:)];

    [UIViewsetAnimationCurve:UIViewAnimationCurveEaseOut];

  //  self.mImagView.frame=self.mTextView.frame;更改中心就是移动

//      self.mImagView.bounds=self.view.bounds;  更改bounds

   // self.mImagView.backgroundColor=[UIColor redColor];更改背景颜色

    [UIViewsetAnimationTransition:UIViewAnimationTransitionCurlDownforView:self.mImagViewcache:YES];//旋转或者翻页效果动画

    

    [UIViewcommitAnimations];//动画的结束标志


2.Block动画,目前使用最广的一种方式

    duration:动画执行时间   delay:延迟时间   usingSpringWithDamping时候来加的属性表示弹性属性0-1 

    initialSpringVelocity:初始化速度  options:动画效果选择项 比如先快后慢 重复方式 翻页方式等

    animations:真正的动画部分 移动 旋转  改变基本位置属性等   completion:动画完成回调block


    [UIViewanimateWithDuration:2.0fdelay:0.5fusingSpringWithDamping:0.5initialSpringVelocity:0.25        options:UIViewAnimationOptionCurveEaseOutanimations:^{

        CGFloat orX=self.mTextView.center.x;

        CGFloat orY=self.mTextView.center.y;

        [self.mTextViewsetCenter:CGPointMake(orX+100, orY+100)];

        

        self.mLable.alpha=0.25;

        self.mImagView.transform=CGAffineTransformScale(self.mImagView.transform,0.5,0.5);

        

    } completion:^(BOOL finished) {

        NSLog(@"第一个动画完毕");

    } ];

  3.转场动画 transitionWithView:主要用于UIView的进入或者离开视图时


      

   [UIViewtransitionWithView:_mImagViewduration:2options:UIViewAnimationOptionTransitionFlipFromLeftanimations:^{

        self.mImagView.hidden=YES;

    } completion:^(BOOL finished) {

        

    }];

一般转场动画都会用下面这个有明确的出去和进来的两个View很明确,如下_mTextView就是要离开视图的,_mImagView就是要进入视图的。

   [UIViewtransitionFromView:_mTextViewtoView:_mImagViewduration:2options:UIViewAnimationOptionCurveEaseOut|UIViewAnimationTransitionCurlDowncompletion:nil];


4.帧动画Frame 也叫嵌套的连续动画

  

   

    CGFloat orX=self.mLable.center.x;

    CGFloat orY=self.mLable.center.y;

    CGPoint orCenter=self.mLable.center;

    [UIViewanimateKeyframesWithDuration:2delay:0.5options:UIViewKeyframeAnimationOptionRepeatanimations:^{

        

        [UIViewaddKeyframeWithRelativeStartTime:0.0relativeDuration:0.25animations:^{

            [self.mLablesetCenter:CGPointMake(orX+80, orY-20)];

        }];

        

        [UIViewaddKeyframeWithRelativeStartTime:0.15relativeDuration:0.4animations:^{

            self.mLable.transform=CGAffineTransformMakeRotation(-M_PI_4/2);

        }];

        

        [UIViewaddKeyframeWithRelativeStartTime:0.25relativeDuration:0.35animations:^{

             [self.mLablesetCenter:CGPointMake(orX+100, orY-50)];

            self.mLable.alpha=0;

        }];

        

        [UIViewaddKeyframeWithRelativeStartTime:0.55relativeDuration:0.05animations:^{

            self.mLable.transform=CGAffineTransformIdentity;

             [self.mLablesetCenter:CGPointMake(0, orY)];

        }];

        [UIViewaddKeyframeWithRelativeStartTime:0.65relativeDuration:0.5animations:^{

            self.mLable.alpha=1.0;

            self.mLable.center=orCenter;

        }];

        

    } completion:^(BOOL finished) {

        

    }];


   [UIView  animateKeyFramesWithDuration:所有帧的动画时间和 delay:动画延迟开始 options:动画的效果选项 animations:在这里属性每一帧的动画(addKeyFrameWithRelativeStartTime)completion:所有add的帧的动画完成后的回调block];


[UIView addKeyFrameWithRelativeStartTime:相对开始的时间,即相对于整个动画开始的时间起点  relativeDuration:本帧动画的持续时间 animations:本帧动画的具体内容];


5.IOS核心动画也就是上面的4动画的底层代码 CALayer的操作



     

     

0 0
原创粉丝点击