UIImageView 图片旋转360度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/st646889325/article/details/79030668

  


    CABasicAnimation *rotationAnimation;


    //围绕Z轴旋转

    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];


    //改变属性的起始值

    rotationAnimation.fromValue = [NSNumber numberWithFloat:0];


    //改变属性的结束值

    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];


    //动画时长

    rotationAnimation.duration = 5.0f;


    rotationAnimation.cumulative = YES;


    //重复次数

    rotationAnimation.repeatCount 1;


    //防止动画结束后回到初始状态

   rotationAnimation.removedOnCompletion = NO;

   rotationAnimation.fillMode = kCAFillModeForwards;


 

 //添加动画

[self.scanImgView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];



动画开始和结束时的事件

为了获取动画的开始和结束事件,需要实现协议

positionAnima.delegate = self;
代理方法实现

 
 
//动画开始时 - ( void)animationDidStart:( CAAnimation *)anim { NSLog( @"开始了"); } //动画结束时 - ( void)animationDidStop:( CAAnimation *)anim finished:( BOOL)flag { //方法中的flag参数表明了动画是自然结束还是被打断,比如调用了removeAnimationForKey:方法或removeAnimationForKey方法,flag为NO,如果是正常结束,flag为YES。 NSLog( @"结束了"); }
 
  

其实比较重要的是有多个动画的时候如何在代理方法中区分不同的动画 两种方式

方式一:
如果我们添加动画的视图是全局变量,可使用该方法。

添加动画时,我们使用了

[self.imageView.layer addAnimation:animaGroup forKey:@"Animation"];

所以,可根据key来区分不同的动画

//动画开始时
- (void)animationDidStart:(CAAnimation *)anim
{
    if ([anim isEqual:[self.imageView.layer animationForKey:@"Animation"]]) {
        NSLog(@"动画组执行了");
    }
}

Note:把动画存储为一个属性然后再回调中比较,用来判定是哪个动画是不可行的。应为委托传入的动画参数是原始值的一个深拷贝,不是同一个值

方式二

添加动画的视图是局部变量时,可使用该方法
添加动画给动画设置key-value对

[positionAnima setValue:@"PositionAnima" forKey:@"AnimationKey"];

[transformAnima setValue:@"TransformAnima" forKey:@"AnimationKey"];

所以,可以根据key中不同的值来进行区分不同的动画

//动画结束时
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    if ([[anim valueForKey:@"AnimationKey"]isEqualToString:@"PositionAnima"]) {
        NSLog(@"位置移动动画执行结束");
    }
    else if ([[anim valueForKey:@"AnimationKey"]isEqualToString:@"TransformAnima"]){
        NSLog(@"旋转动画执行结束");
    }
}

猜你喜欢

转载自blog.csdn.net/st646889325/article/details/79030668