猫猫学IOS(四十)UI之核心动画_抖动效果_CAKeyframeAnimation

猫猫分享,必须精品

原创文章,欢迎转载。转载请注明:翟乃玉的博客

地址:http://blog.csdn.net/u013357243?viewmode=contents

效果:

效果一:

效果二:

代码:

//
//  NYViewController.m
//  图片抖动
//
//  Created by apple on 15-5-8.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYViewController.h"

@interface NYViewController ()

@property (nonatomic, weak) UIImageView *iconView;

@end

@implementation NYViewController

-(UIImageView *)iconView
{
    if (_iconView == nil) {
        UIImageView *iconView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"cat"]];

        iconView.center = CGPointMake(100, 230);
        [self.view addSubview:iconView];
        _iconView = iconView;
        return _iconView;
    }
    return _iconView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self iconView];

}

//开始抖动
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    [self position];
    [self rotation];

}

//关键帧动画移动
- (void)position {
    // 1.创建核心动画
    CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];
    // 1.1告诉系统执行什么动画
    keyAnima.keyPath = @"position";
    //    NSValue *v1 = [NSValue valueWithCGPoint:CGPointMake(0, 100)];
    NSValue *v1 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
    NSValue *v2 = [NSValue valueWithCGPoint:CGPointMake(250, 100)];
    NSValue *v3 = [NSValue valueWithCGPoint:CGPointMake(250, 300)];
    NSValue *v4 = [NSValue valueWithCGPoint:CGPointMake(100, 300)];
    NSValue *v5 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];

    keyAnima.values = @[v1, v2, v3, v4, v5];

    //    keyAnima.keyTimes = @[@(0.5) ,@(0.5), @(0.5)];

    keyAnima.timingFunction =  [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    // 1.2保存执行完之后的状态
    // 1.2.1执行完之后不删除动画
    keyAnima.removedOnCompletion = NO;
    // 1.2.2执行完之后保存最新的状态
    keyAnima.fillMode = kCAFillModeForwards;

    // 1.3设置动画时间
    keyAnima.duration = 2;

    // 2.观察动画什么时候开始执行, 以及什么时候执行完毕
    keyAnima.delegate = self;

    // 2.添加核心动画
    [self.iconView.layer addAnimation:keyAnima forKey:nil];
}

//动画抖动效果rotation
- (void)rotation {
    //1,创建核心动画
    CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];

    //2,告诉系统执行什么动画。
    keyAnima.keyPath = @"transform.rotation";

    //              (-M_PI_4 /90.0 * 5)表示-5度 。
    keyAnima.values = @[@(-M_PI_4 /90.0 * 5),@(M_PI_4 /90.0 * 5),@(-M_PI_4 /90.0 * 5)];

    // 1.2.1执行完之后不删除动画
    keyAnima.removedOnCompletion = NO;
    // 1.2.2执行完之后保存最新的状态
    keyAnima.fillMode = kCAFillModeForwards;

    //动画执行时间
    keyAnima.duration = 0.2;

    //设置重复次数。
    keyAnima.repeatCount = MAXFLOAT;

    // 2.添加核心动画
    [self.iconView.layer addAnimation:keyAnima forKey:nil];
}

@end

CAKeyframeAnimation帧动画介绍

CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值

属性解析:

values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧

path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略

keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的

CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation

用法步骤:

1.创建核心动画

    CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];

1.1告诉系统执行什么动画

 keyAnima.keyPath = @"position";

    NSValue *v1 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
    NSValue *v2 = [NSValue valueWithCGPoint:CGPointMake(250, 100)];
    NSValue *v3 = [NSValue valueWithCGPoint:CGPointMake(250, 300)];
    NSValue *v4 = [NSValue valueWithCGPoint:CGPointMake(100, 300)];
    NSValue *v5 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];

    keyAnima.values = @[v1, v2, v3, v4, v5];

    keyAnima.timingFunction =  [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

1.2保存执行完之后的状态

1.2.1执行完之后不删除动画

keyAnima.removedOnCompletion = NO;

1.2.2执行完之后保存最新的状态

  keyAnima.fillMode = kCAFillModeForwards;

1.3设置动画时间

 keyAnima.duration = 2;

2.观察动画什么时候开始执行, 以及什么时候执行完毕

 keyAnima.delegate = self;

2.添加核心动画到CALayer

[self.iconView.layer addAnimation:keyAnima forKey:nil];
时间: 2024-10-06 10:45:13

猫猫学IOS(四十)UI之核心动画_抖动效果_CAKeyframeAnimation的相关文章

(素材源码)猫猫学IOS(十四)UI之UITableView扩充_表格的修改_(增删移动)

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8544315 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u013357243?viewmode=contents

猫猫学IOS(十四)UI之UITableView扩充_表格的修改_(增删移动)

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44727823 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 代码 //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u013357243?viewmode=

猫猫学IOS(十五)UI之曾经大热的打砖块小游戏

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44814523 原文地址:http://blog.csdn.net/u013357243?viewmode=contents !素材代码里面有我写的全部代码,注释齐全,方便学习 先看效果图 代码 //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csd

(素材源码)猫猫学IOS(十五)UI之曾经大热的打砖块小游戏

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8555567 原文地址:http://blog.csdn.net/u013357243?viewmode=contents !素材代码里面有我写的全部代码,注释齐全,方便学习 先看效果图 ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u0133

猫猫学IOS(十六)UI之XIB自定义Cell实现团购UI

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44926809 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XIB的定义步骤 1> 新建HMTgCell.xib 2> 拽一

(素材源码)猫猫学IOS(十六)UI之XIB自定义Cell实现团购UI

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8572001 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XIB的定义步骤 1> 新建HMTgCell.xib 2> 拽一个需要自定义

猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44706671 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 源代码 NYViewController的代码 //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net

(素材源码) 猫猫学IOS(十二)UI之UITableView学习(上)LOL英雄联盟练习

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8542789 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u013357243?viewmode=contents

猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/45000699 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看图片 第一步完成tableView和Cell的架子的图 完善图片 键盘弹出设置后图片: 自动回复图: 粗狂的架子 tableView和Cell的创建 首相tableView为了学习方便就直接用stroyBoard拖拽了,包括一些学习意义不