AJ分享,必须精品

效果:

效果一:

效果二:

代码:

//
// 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];

AJ学IOS(40)UI之核心动画_抖动效果_CAKeyframeAnimation的更多相关文章

  1. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  2. iOS开发UI篇—核心动画(转场动画和组动画)

    转自:http://www.cnblogs.com/wendingding/p/3801454.html iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的 ...

  3. iOS开发UI篇—核心动画(关键帧动画)

    转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...

  4. iOS开发UI篇—核心动画(基础动画)

    转自:http://www.cnblogs.com/wendingding/p/3801157.html 文顶顶 最怕你一生碌碌无为 还安慰自己平凡可贵 iOS开发UI篇—核心动画(基础动画) iOS ...

  5. iOS开发UI篇—核心动画简介

    转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...

  6. AJ学IOS 之BLOCK的妙用_利用block实现链式编程

    AJ分享,必须精品 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这 ...

  7. AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他

    AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ...

  8. AJ学IOS(41)UI之核心动画 两行代码搞定3D转场

    AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...

  9. AJ学IOS(38)UI之核心动画简介

    AJ分享,必须精品 核心动画(简介) Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就 ...

随机推荐

  1. Centos7配置IP地址和DNS

    目录 一.查看IP地址 1.ifconfig命令 2.ip addr命令 二.配置网卡 1.动态IP地址 2.静态IP地址 3.重启网卡 三.注意事项 四.本地虚拟机设置静态IP后不能上网的解决方法 ...

  2. JSFinder:一个在js文件中提取URL和子域名的脚本

    JSFinder介绍 JSFinder是一款用作快速在网站的js文件中提取URL,子域名的脚本工具. 支持用法 简单爬取 深度爬取 批量指定URL/指定JS 其他参数 以往我们子域名多数使用爆破或DN ...

  3. 【2020-03-28】Dubbo源码杂谈

    前言 本周空闲时间利用了百分之六七十的样子.主要将Dubbo官网文档和本地代码debug结合起来学习,基本看完了服务导出.服务引入以及服务调用的过程,暂未涉及路由.字典等功能.下面对这一周的收获进行一 ...

  4. vscode快速生成html模板(vscode快捷键"!"生成html模板)

    问题: 在vscode中新建test.html, 内容是空白的,输入"!",然后按tap键 ,没有生成常见的html模板,也就是如下: 输入! html html:5 DOCTYP ...

  5. JS十大经典排序排序算法

    1.冒泡排序 冒泡排序通常排在第一位,说明它是排序算法的入门算法,是最简单的一个排序算法,而且必须掌握和理解. 先来看看代码吧: function bubbleSort(arr) { let temp ...

  6. promise的优势

    通过不同的方式读取在 files 文件夹下的三个文件来引出 promise 在处理异步时与回调函数相比的优势,files 文件夹有三个文件 a.json,b.json,c.json. // a.jso ...

  7. 一文带你入门Java Stream流,太强了

    两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...

  8. MYSQL_批量更新

    UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END, title = ...

  9. Jmeter4.0接口测试之WebServices(四)

    关于什么是web services,可以到W3C中查看详细的信息,本文章主要介绍使用Jmeter怎么来做web services的接口测试,首先它也是基于HTTP协议的,我们实现电话号码归属地的查询, ...

  10. EntityFramework Core 3.x添加查询提示(NOLOCK)

    前言 前几天看到有园友写了一篇关于添加NOLOCK查询提示的博文<https://www.cnblogs.com/weihanli/p/12623934.html>,这里呢,我将介绍另外一 ...