ios 关于动画用法的总结
#import "FirstVC.h"@implementation FirstVC/* 创建xib过程 1 创建xib(名字和类名相同) 2 文件拥有者为类名 3 和类的view连线 */- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self;}- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view from its nib.}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}//UIView属性动画- (IBAction)pressPropertyAnimation:(id)sender { //1 准备动画 //参数1: 动画的作用, 用来区分多个动画, 参数二: 传递参数用 nil:OC中使用 NULL:C语言使用 [UIView beginAnimations:@"改变大小" context:NULL]; //在准备动画的时候可以设置动画的属性 [UIView setAnimationDuration:2];//设置动画的持续时间 [UIView setAnimationDelegate:self]; [UIView setAnimationWillStartSelector:@selector(startAnimation)];// [UIView setAnimationDelay:1];//动画延迟执行时间 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//动画的曲线 [UIView setAnimationRepeatCount:20];//动画的重复次数 [UIView setAnimationRepeatAutoreverses:YES];//动画往返执行, 必须设置动画的重复次数 //2 修改view的属性, 可以同时修改多个属性 注意:不是所有的属性都可以修改的(只有frame, center, bounds, backgroundColor, alpha, transform 可以修改) self.changeView.frame = CGRectMake(110, 100, 100, 100);// self.changeView.backgroundColor = [UIColor brownColor]; self.changeView.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:0.5]; //3 提交并执行动画 [UIView commitAnimations];}//UIView过度动画- (IBAction)pressTranstionAnimation:(id)sender { //1 准备动画 [UIView beginAnimations:@"过度动画" context:NULL]; [UIView setAnimationDuration:5]; [UIView setAnimationRepeatCount:50]; //2 设置过度样式 //参数1: 过度样式, 参数2: 指定那个View做动画, 参数3: 是否设置缓存 [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.changeView cache:YES]; self.changeView.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:0.5]; //3 提交并执行动画 [UIView commitAnimations];}//Block动画- (IBAction)pressBlockAnimation:(id)sender { //只有一行代码 Block动画实质是对UIView动画的封装 //参数1:动画时长 参数2:Block: 设置要修改的View属性 /* [UIView animateWithDuration:2 animations:^{ self.changeView.backgroundColor = [UIColor orangeColor]; }]; */ //第二种Block /* //参数1:动画时长 参数2:Block: 设置要修改的View属性 参数3: 动画完成时调用 [UIView animateWithDuration:2 animations:^{ self.changeView.backgroundColor = [UIColor orangeColor]; } completion:^(BOOL finished) { //finished判断动画是否完成 if (finished) { NSLog(@"finished"); } }]; */ //第三种Block /* [UIView animateWithDuration:2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{// 设置要修改的View属性 self.changeView.backgroundColor = [UIColor orangeColor]; } completion:^(BOOL finished) { //finished判断动画是否完成 if (finished) { NSLog(@"finished"); } }]; */ //对过度动画的封装 //参数1: 改变的View 参数2:动画时长 参数3:动画类型 参数4 Block: 设置要修改的View属性 参数5:完成后的操作 [UIView transitionWithView:self.changeView duration:2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ self.changeView.backgroundColor = [UIColor orangeColor]; } completion:^(BOOL finished) { //finished判断动画是否完成 if (finished) { NSLog(@"finished"); } }];}#pragma mark - AnimationDelegate//动画将要开始时调用- (void)animationWillStart:(NSString *)animationID context:(void *)context{ NSLog(@"start: %@, %@", animationID, context);}//动画结束时调用- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{ NSLog(@"stop: %@, %@", animationID, context);}- (void)startAnimation{ NSLog(@"self");}#import "SecondVC.h"@implementation SecondVC- (void)viewDidLoad{ [super viewDidLoad];
NSLog(@"%@", NSStringFromCGRect(self.changeView.frame)); NSLog(@"%f", CGRectGetWidth(self.changeView.frame)); //UIView和CALayer的关系 //UIView负责交互, frame以及显示CALayer //CALayer负责渲染, 并且它是UIView的一个readonly属性 /* self.changeView.layer.cornerRadius = 100;//设置圆角, 参数是内切圆的半径, 若想画一个圆, 前提是view必须是正方形, 参数应该是view边长的一半 self.changeView.layer.borderWidth = 1;//设置描边的宽度 self.changeView.layer.borderColor = [UIColor orangeColor].CGColor;//设置描边的颜色(UIView上的颜色使用的是UIColor, CALayer上使用的颜色是CGColor) self.changeView.layer.shadowOffset = CGSizeMake(50, 100);//设置阴影的偏移量 width影响水平偏移(正右负左), height影响垂直偏移(正下负上) self.changeView.layer.shadowColor = [UIColor grayColor].CGColor;//阴影的偏移的颜色 self.changeView.layer.shadowOpacity = 1;//阴影的不透明度, 取值范围(0 ~ 1), 默认是0, 就是透明的 */// CAAnimation抽象类, 使用必须要使用其具体的子类// CAPropertyAnimation抽象子类, 需要子类化// CABasicAnimation// CAKeyframeAnimation}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (void)dealloc { [_changeView release]; [super dealloc];}//CABasicAnimation基本动画 没有真正的修改属性值- (IBAction)pressBasicAnimation:(id)sender { //1 创建并指定要修改的属性// KeyPath:CAlayer的属性名, 不是所有的属性都可以, 只有在头文件中出现animatable的属性才可以, 可以修改属性的属性, 例如:bounds.size// CALayer CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds"]; [basic setDuration:2]; //2 修改属性值 basic.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)]; basic.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)];// basic.byValue = //3 添加动画 //key做区分动画用 [self.changeView.layer addAnimation:basic forKey:@"changColor"];}//CAKeyframeAnimation关键帧动画- (IBAction)pressKeyFrameAnimation:(id)sender { /* //1 创建动画 CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"bounds"]; [keyFrame setDuration:2]; //2 修改属性 keyFrame.values = @[[NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)], [NSValue valueWithCGRect:CGRectMake(0, 0, 250, 250)], [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)]];// keyTimes:值代表了出现动画的时刻, 值得范围是0~1, 值必须是递增的, keyTimes和values是一一对应的 keyFrame.keyTimes = @[@(0.4), @(0.6), @(1)]; //3 添加动画 [self.changeView.layer addAnimation:keyFrame forKey:@"keyFrame"]; */ CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"]; [keyFrame setDuration:10]; keyFrame.values = @[(id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor]; //keyTimes中的第一个值是0, 不能修改 keyFrame.keyTimes = @[@(0.3), @(0.5), @(0.6), @(0.7), @(0.9)]; [self.changeView.layer addAnimation:keyFrame forKey:nil];}// CATransaction 过度动画- (IBAction)pressTransition:(id)sender { //1 创建 CATransition *transition = [CATransition animation]; [transition setDuration:2]; //2 设置过度样式 transition.type = kCATransitionReveal;//控制样式 transition.subtype = kCATransitionFromTop;//控制方向 //添加动画 [self.changeView.layer addAnimation:transition forKey:nil];}// CAAnimationGroup 组动画- (IBAction)pressAnimationGroup:(id)sender { //1 创建并指定要修改的属性 // KeyPath:CAlayer的属性名, 不是所有的属性都可以, 只有在头文件中出现animatable的属性才可以, 可以修改属性的属性, 例如:bounds.size // CALayer CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds"]; [basic setDuration:2]; //2 修改属性值 basic.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)]; basic.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)]; CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"]; [keyFrame setDuration:5]; keyFrame.values = @[(id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor]; //keyTimes中的第一个值是0, 不能修改 keyFrame.keyTimes = @[@(0.3), @(0.5), @(0.6), @(0.7), @(0.9)]; // 创建 //当group动画的时长 > 组中所有动画的最长时长, 动画的时长以组中最长的时长为准 //当group动画的时长 < 组中所有动画的最长时长, 动画的时长以group的时长为准 //最合适: group的时长 = 组中所有动画的最长时长 CAAnimationGroup *group = [CAAnimationGroup animation]; [group setDuration:10]; //设置组动画 group.animations = @[basic, keyFrame]; //添加动画 [self.changeView.layer addAnimation:group forKey:nil];}@endios 关于动画用法的总结的更多相关文章
- iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题
本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37 segmentfault-博客原文 http://segm ...
- iOS核心动画学习整理
最近利用业余时间终于把iOS核心动画高级技巧(https://zsisme.gitbooks.io/ios-/content/chapter1/the-layer-tree.html)看完,对应其中一 ...
- IOS 核心动画之CAKeyframeAnimation - iBaby
- IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...
- iOS各种动画效果
ios各种动画效果 最普通动画: //开始动画 [UIView beginAnimations:nil context:nil]; //设定动画持续时间 [UIView setAnimationDu ...
- IOS之动画
IOS之动画 15.1 动画介绍 15.2 Core Animation基础 15.3 隐式动画 15.4 显式动画 15.5 关键帧显式动画 15.6 UIView级别动画 15.1 动画介绍 ...
- IOS NSUserDefaults 讲解 用法
IOS NSUserDefaults 讲解 用法 NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...
- IOS 动画专题 --iOS核心动画
iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...
- ios 学习动画的套路 (一)
你也肯定喜欢炫酷的动画! 在APP中,动画就是一个点睛之笔!可以给用户增加一些独特的体验感,估计也有许多的和我一样的,看着那些觉得不错的动画,也就只能流口水的孩子,毕竟~不知道从哪里下手去写!会连续的 ...
- Bodymovin:Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画
转自:https://www.cnblogs.com/zamhown/p/6688369.html 大杀器Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画 ...
随机推荐
- bzoj1063【Noi2008】道路设计
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1063 用一种划分方式将树划为重链和轻链,使得所有点到根节点的路径经过的轻链最大值最小 sol: ...
- Snmp的学习总结——Snmp的基本概念
摘自:http://www.cnblogs.com/xdp-gacl/p/3978825.html 一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network ...
- Spring的@Configuration来代替xml配置
一. Xml配置法 下面是一个典型的spring配置文件(application-config.xml): [xml] view plain copy <beans> <bean i ...
- 用 Jackson 来处理 JSON
Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好. 首先创建一个User对象类 (User.java) package com.sivalabs.json; impor ...
- Lucas 卢卡斯定理
Lucas: 卢卡斯定理说白了只有一条性质 $$ C^n_m \equiv C^{n/p}_{m/p} \times C^{n \bmod p}_{m \bmod p} \ (mod \ \ p) $ ...
- nosql整理
Nosql: Redis,Memcache,MongoDB,Hbase,Couchbase LevelDB https://www.cnblogs.com/lina520/p/7919551.htm ...
- 标准C程序设计七---13
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- MongoDB数据关系的表达
虽说MongoDB是非关系型数据库,但由于大部分情况下数据之间是存在关系的,所以MongoDB也需要一些方式来表达数据之间的关系.MongoDB表达数据关系的方式有两种:文档嵌套和数据库引用. 一.文 ...
- Idea配置Tomcat以及maven
配置Tamcat Run-->Edit Configurations +-->如果列表里没有tomcat-->点击33 items more irrelevant继续寻找--> ...
- ffmpeg 时间戳
转http://blog.csdn.net/yfh1985sdq/article/details/5721953 AVpacket里的时间戳pts和dts.单位好像是us. 问 : 时间戳pts和dt ...