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. android 练习效果(界面一)

  2. Django魔法

    (●'◡'●)

  3. Trie树的简单实现

    import java.util.ArrayList; import java.util.TreeMap; import util.FileOperation; public class Trie { ...

  4. ELK 环境搭建总结

    开始动手前的说明 我搭建这一套环境的时候是基于docker搭建的,用到了docker-compose,所以开始前要先安装好docker . docker-compose,并简单的了解docker . ...

  5. IDEA 快捷键大全及常用插件

    IDEA快捷键操作 颜色主题插件: **Material Theme UI Plugin ** 快捷键提醒: **Key Promoter X ** 查找Bug: QAPlig-FindBugs 热部 ...

  6. OpenCV-Python Canny边缘检测 | 十九

    目标 在本章中,我们将学习 Canny边缘检测的概念 OpenCV函数: cv.Canny() 理论 Canny Edge Detection是一种流行的边缘检测算法.它由John F. Canny发 ...

  7. 白话web安全

    伤心往事 梦回大二,那时候沉迷于毒奶粉,甚至国庆都在宿舍与毒奶粉共同度过,但是却发生了一件让我迄今难忘的事情~ 我新练的黑暗武士被盗了!!!干干净净!!! 虽然过了好久了,但是记忆犹新啊,仿佛发生在昨 ...

  8. 关于C#三层架构中的“分页”功能

    新手上路,请多指教! 今天将分页功能实现了,要特别感谢坐在前面的何同学的指点,不胜感谢!功能的实现采用了三层架构的方式实现该功能,简述如下: 界面: DAL层有两个方法:“当前所在页”和“总页数” 这 ...

  9. PTA数据结构与算法题目集(中文) 7-9

    PTA数据结构与算法题目集(中文)  7-9 7-9 旅游规划 (25 分)   有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游 ...

  10. JavaScript中数组的两种排序方法详解(冒泡排序和选择排序)

    一.冒泡排序的原理(从小到大) 相邻两个数进行比较,如果前一个数大于后一个数,那么就交换,否则不交换 原理剖析 比如有一组含有6个数字的数:5.3.7.2.1.6一共6个数字,做5次循环,每次循环相邻 ...