iOS动画效果三:CABAsicAnimation实现平移、旋转和放大

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS动画效果三:CABAsicAnimation实现平移、旋转和放大相关的知识,希望对你有一定的参考价值。

参考技术A 使用CABAsicAnimation来实现动画的放缩和旋转是比较常用的,这篇主要介绍CABasicAnimation实现简单的动画效果
最终的效果图为:

Demo地址
对应的实现文件是SecondViewController

首先,我们先定义一个UIView以及三个button按钮,分别对应平移、放大和旋转
在.h文件中定义相应的属性

之后,在.m文件中实现相应的懒加载

将UIView以及button添加到界面上

之后,我们先来实现平移动画,实现下面的方法

这里面遇到挺多坑的,下面逐条说明一下

接下俩,我们类似添加相应的放大和旋转的动画效果

这样,我们就完成了CABasicAnimation实现平移、放大和旋转的动画效果

这种动画效果使用挺多的

另外,我们阅读苹果开发文档时,我们可以看到协议CAAnimationDelegate,通过这个协议我们可以观察动画的开始和结束。
在平移动画中,让CABasicAnimation遵守这个协议

实现相应的协议方法

比较重要的是,我们通过协议方法可以判断动画是否正常完成还是被打断,这个我以前就碰到过动画过程被UITableView 的reloadData打断,导致动画表现异常,具体可以看下这篇文章
CAnimationGroup动画执行时间比duration小
)

最终效果图为:

Demo地址

我写的同一系列的其他文章

iOS开发中动画效果的探究(一)

iOS动画效果的探究二:UIView Animation实现动画

iOS动画效果三:CABAsicAnimation实现平移、旋转和放大

ios动画效果四:使用Pop框架实现弹簧效果

iOS动画效果五:CABasicAnimation实现绕定点旋转的效果 ]

iOS动画效果六:实现自定义的push转场动画

iOS动画效果七:实现自定义present转场动画效果

iOS动画效果八:实现类似系统的测滑返回效果

ios开发之核心动画四:核心动画-Core Animation--CABasicAnimation基础核心动画

 

 

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *redView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
    
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    //1.创建动画对象(设置layer的属性值.)
    CABasicAnimation *anim = [CABasicAnimation animation];
    //2.设置属性值
    anim.keyPath = @"position.x";
    anim.toValue = @300;
    
    //动画完成时, 会自动删除动画
    anim.removedOnCompletion = NO;
    anim.fillMode = @"forwards";
    
    //3.添加动画:key值是为了区分不同的动画
    [self.redView.layer addAnimation:anim forKey:nil];
    
}

 

核心动画之作用在层上面.

动画的本质是改图层的某一个属性.

CABasicAnimation *anim = [CABasicAnimation animation];

图层有那些属性,这里才能写那些属性.

anim.keyPath = @"transform.scale";

anim.toValue = @0.5;

告诉动画完成的时候不要移除

anim.removedOnCompletion = NO;

保存动画最前面的效果.也就是最后一个设置的效果

anim.fillMode = kCAFillModeForwards;

把动画添加到层上面.

[_redView.layer addAnimation:anim forKey:nil];

 

二:心跳效果

 

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageV;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}



-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    //创建动画对象
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    //设置属性值
    anim.keyPath = @"transform.scale";
    anim.toValue = @0;

    //设置动画执行次数
    anim.repeatCount = MAXFLOAT;
    
    //设置动画执行时长
    anim.duration = 3;
    
    //自动反转(怎么样去 怎么样回来)
    anim.autoreverses = YES;
    
    //添加动画
    [self.imageV.layer addAnimation:anim forKey:nil];
    
    
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

思路:就是让一张图片做一个放大缩放小的动画.

 

代码实现:

 

    CABasicAnimation *anim =[CABasicAnimation  animation];

    设置缩放属性

    anim.keyPath = @"transform.scale";

    缩放到最小

    anim.toValue = @0;

    设置动画执行的次数

    anim.repeatCount = MAXFLOAT;

    设置动画执行的时长

    anim.duration = 0.25;

    设置动画自动反转(怎么去, 怎么回)

    anim.autoreverses = YES;

    添加动画

    [self.heartView.layer addAnimation:anim forKey:nil];

以上是关于iOS动画效果三:CABAsicAnimation实现平移、旋转和放大的主要内容,如果未能解决你的问题,请参考以下文章

iOS CoreAnimation 基础动画CABasicAnimation

iOS 使用transform和CABasicAnimation实现视图围绕定点旋转和实现一个旋转的圆的动画 以转盘为例

iOS_40_核心动画

iOS CoreAnimation 基础动画CABasicAnimation

iOS:为啥动画在 CABasicAnimation 下运行良好,但在 animateWithDuration 下看起来很奇怪?

iOS 动画CABasicAnimation animationWithKeyPath 一些规定的值