iOSCABasicAnimation的创建、停止和恢复

来源:互联网 发布:nba哪只球队好看 知乎 编辑:程序博客网 时间:2024/05/22 20:27

#pragma mark - 当前视图被触摸

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    

    

    //1.判断myView.layer上是否添加了动画

   CAAnimation *animation = [myView.layeranimationForKey:@"rotationAnimation"];

   if (animation) {

        

        //2.判断是否暂停、恢复

        

       if (myView.layer.speed ==0) {

           //恢复动画

            [selfresumeAnimation];

        }else {

           //暂停动画

            [selfpauseAnimation];

        }

        

    }else {

        [selfrotationAnimation];

    }

}


#pragma mark - 动画效果


//暂停动画

- (void)pauseAnimation {

    

    //0-5

    //开始时间:0

//    myView.layer.beginTime

    //1.取出当前时间,转成动画暂停的时间

    CFTimeInterval pauseTime = [myView.layerconvertTime:CACurrentMediaTime()fromLayer:nil];

    

    //2.设置动画的时间偏移量,指定时间偏移量的目的是让动画定格在该时间点的位置

   myView.layer.timeOffset = pauseTime;

    

    //3.将动画的运行速度设置为0默认的运行速度是1.0

   myView.layer.speed =0;

    

}


//恢复动画

- (void)resumeAnimation {

    

    //1.将动画的时间偏移量作为暂停的时间点

    CFTimeInterval pauseTime =myView.layer.timeOffset;

    

    //2.计算出开始时间

   CFTimeInterval begin = CACurrentMediaTime() - pauseTime;

    

    [myView.layersetTimeOffset:0];

    [myView.layersetBeginTime:begin];

    

   myView.layer.speed =1;

}


//CABasicAnimation 实现旋转动画

- (void)rotationAnimation {

    

    //1.创建动画对象

    //默认是按Z轴旋转

    CABasicAnimation *basic = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];

    

    //2.设置动画属性

    [basicsetToValue:@(2*M_PI)]; //2*M_PI 旋转一周

    [basicsetDuration:0.5f];

    

    //动画完成后,是否从CALayer上移除动画对象

//    [basic setRemovedOnCompletion:YES];

    

    //设置重复次数,HUGE_VALF是一个非常大的浮点数

    [basicsetRepeatCount:HUGE_VALF];

    

    //动画根据锚点旋转的

    //修改锚点

    [myView.layersetAnchorPoint:CGPointMake(0,0)];

    

    

    //3.添加动画

    [myView.layeraddAnimation:basicforKey:@"rotationAnimation"];

    

}


//CABasicAnimation 实现缩放动画

- (void)scaleAnimation {

    

    //1.创建动画对象

    CABasicAnimation *basic = [CABasicAnimationanimationWithKeyPath:@"transform.scale"];

    

    //2.设置动画的属性

    //fromValue toValue

    

    [basicsetFromValue:@1];

    [basicsetToValue:@2];

    

    //设置动画的时长

    [basicsetDuration:0.6f];

    

    //是否自动恢复原始

//    [basic setAutoreverses:YES];

    

    basic.removedOnCompletion =NO;

    basic.fillMode =kCAFillModeForwards;

    

    //3.将动画添加到CALayer

    [myView.layeraddAnimation:basic forKey:nil];

}


1 0
原创粉丝点击