AJ学IOS(40)UI之核心动画_抖动效果_CAKeyframeAnimation
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的更多相关文章
- iOS开发UI篇—核心动画(UIView封装动画)
iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...
- iOS开发UI篇—核心动画(转场动画和组动画)
转自:http://www.cnblogs.com/wendingding/p/3801454.html iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的 ...
- iOS开发UI篇—核心动画(关键帧动画)
转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...
- iOS开发UI篇—核心动画(基础动画)
转自:http://www.cnblogs.com/wendingding/p/3801157.html 文顶顶 最怕你一生碌碌无为 还安慰自己平凡可贵 iOS开发UI篇—核心动画(基础动画) iOS ...
- iOS开发UI篇—核心动画简介
转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...
- AJ学IOS 之BLOCK的妙用_利用block实现链式编程
AJ分享,必须精品 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这 ...
- AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他
AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ...
- AJ学IOS(41)UI之核心动画 两行代码搞定3D转场
AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...
- AJ学IOS(38)UI之核心动画简介
AJ分享,必须精品 核心动画(简介) Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就 ...
随机推荐
- java虚拟机学习记录(内存划分、垃圾回收、类加载等机制)
一直以来觉得虚拟机是Java最难的一部分,涉及最底层的原理,学起来难度很大,而且工作中基本上用不到这些原理,所以对这部分“敬而远之”.现如今工作五年了,从Java基础到算法.数据结构.网络.数据库.设 ...
- SpringBoot2整合Redis多数据源
配置文件属性 spring: redis: database: 1 host: 192.168.50.144 port: 6379 password: timeout: 600 #Springboot ...
- VS2019 C++动态链接库的创建使用(4) - C语言客户端
前面提到过C++具有函数重载功能,所以引出的函数名会有变化,即名称改编,如果是C语言编写的客户端则无法正确识别. 处理方法: ①只需在宏定义中间增加 extern "C",但这种使 ...
- CORS 跨域中的 preflight 请求
我们知道借助Access-Control-Allow-Origin响应头字段可以允许跨域 AJAX, 对于非简单请求,CORS 机制跨域会首先进行 preflight(一个 OPTIONS 请求), ...
- python通过scapy编写arp扫描器
多网卡的情况下发送二层包需要配置网卡 三层包不需要配置接口发包方法: sr() 发送三层数据包,等待接收一个或者多个数据包的响应 sr1() 发送三层数据包,只会接收一个数据包的响应 srp() 发送 ...
- navicat和pymysql
内容回顾 select distinct 字段1,字段2,...from 表名 where 分组之前的过滤条件 group by 分组条件 having 分组之后过滤条件 order by 排序字段1 ...
- django之forms组件,cookie&session
forms组件 先自己实现注册功能,并且对用户输入的信息加限制条件如果用户输入的信息不符合条件,前端展示报错信息 from django.shortcuts import render,HttpRes ...
- ICLR 2020 | 抛开卷积,multi-head self-attention能够表达任何卷积操作
近年来很多研究将nlp中的attention机制融入到视觉的研究中,得到很不错的结果,于是,论文侧重于从理论和实验去验证self-attention可以代替卷积网络独立进行类似卷积的操作,给self- ...
- ruby中的try catch
1.在ruby中,try catch并不是用来进行异常处理的,而是一种程序流程结构,例如break,continue,go-to等 2.例如如下代码 def promptAndGet(prompt) ...
- 累加数的贡献 CodeForces - 1213D2
题意: 第一行输入n,k,表示有n个数,可以进行整除2操作,要是数组有k个相等的数,最少需要几次操作. 思路: 用一个数组记录每一个数出现的次数,如果一开始大于等于k,直接输出0,否则对这n个数进行从 ...