ios-day18-08(使用CABasicAnimation实现对UIView的平移、旋转、缩放)

要使用CABasicAnimation实现对UIView的平移、旋转、缩放,有以下步骤:

1,创建动画对象

2,设置动画对象

3,拿到UIView的图层layer,把动画对象添加到layer(layer.addAnimation...)


这里解释一下设置动画对象

首先我们创建动画对象:

CABasicAnimation *anim = [CABasicAnimation animation];

然后对动画对象进行设置,动画对象的fromValue、toValue、byValue、duration、removedOnCompletion、fillMode属性如何设置在代码中均有详细注释,

这里来详细说明一下动画对象的keyPath该如何设置:

①假设我们要对UIView实现平移动画,可以设置keyPath = @"position";这里的@"postion"指的是CALayer的postion属性,然后设置toValue的值,toValue中存储的值就是CALayer对象的position属性要改变的值;

当然我们还可以设置keyPath = @"transform";来实现对UIView的平移动画

②假设我们要对UIView实现缩放动画,CALayer有一个属性bounds是控制宽高的,所以可以设置keyPath = @"bounds";

当然还可以设施keyPath = @"transform";来实现对UIView的缩放动画


下面是我自己写的一个demo,演示了UIView的平移、旋转、缩放,代码中有详细的注释。

首先附上源码下载地址:http://download.youkuaiyun.com/detail/liu537192/8558029


效果图:


核心代码:

//
//  JLViewController.m
//  06-核心动画
//
//  Created by XinYou on 15-4-2.
//  Copyright (c) 2015年 vxinyou. All rights reserved.
//

#import "JLViewController.h"

@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;

- (IBAction)rotate;

- (IBAction)translate;

- (IBAction)scale;

- (IBAction)back;
@end

@implementation JLViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
}
/**
 *  旋转
 */
- (IBAction)rotate {
    
    // 创建动画对象
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    // 设置动画对象。keyPath的取值决定了执行怎样的动画
    anim.keyPath = @"transform";
    
    
    // anim.fromValue:fromValue表示从什么值开始改变,默认从原状态开始改变
    // anim.byValue:变化范围从fromValue到(fromValue + byValue)
    // anim.toValue:变化范围从fromValue到toValue
    
    // CATransform3DMakeRotation(angle,x,y,z):以原点O(0,0,0)为起点,A(x,y,z)为结束点
    // 连接OA形成一条直线,以OA所在的直线为旋转轴进行旋转,旋转角度为angle
    anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)];
    
    anim.duration = 1.0;
    
    // 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    // 添加动画
    [self.iconView.layer addAnimation:anim forKey:@"rotate"];
}
/**
 *  平移
 */
- (IBAction)translate {
    // 创建动画对象
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    // 修改CALayer的position属性的值可以实现平移效果
    anim.keyPath = @"position";
    anim.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
    
    anim.duration = 1.0;
    
    // 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    // 添加动画
    [self.iconView.layer addAnimation:anim forKey:@"translate"];
}
/**
 *  缩放
 */
- (IBAction)scale {
    
    // 创建动画对象
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    // 修改CALayer的bounds属性的值也可以实现缩放效果
    //    anim.keyPath = @"bounds";
    //    anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
    anim.keyPath = @"transform";
    
    // CATransform3DMakeScale(x,y,z):x,y,z表示xyz三个方向的缩放比例
    anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2, 2, 1)];
    
    // 动画时间
    anim.duration = 1.0;
    
    // 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    // 添加动画
    [self.iconView.layer addAnimation:anim forKey:@"scale"];
}
/**
 *  还原
 */
- (IBAction)back {
    
//    [self.iconView.layer removeAnimationForKey:@"translate"];
//    [self.iconView.layer removeAnimationForKey:@"scale"];
//    [self.iconView.layer removeAnimationForKey:@"rotate"];
    
    // 上面3句可以简写为1句
    [self.iconView.layer removeAllAnimations];
}

@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值