UIImageView 图片旋转360度

  


    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(@"旋转动画执行结束");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值