一、UIView动画(首尾)

1.简单说明

UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持

执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码放在[UIView beginAnimations:nil context:nil]和[UIView commitAnimations]之间

常见方法解析:

+ (void)setAnimationDelegate:(id)delegate     设置动画代理对象,当动画开始或者结束时会发消息给代理对象

+ (void)setAnimationWillStartSelector:(SEL)selector   当动画即将开始时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDidStopSelector:(SEL)selector  当动画结束时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDuration:(NSTimeInterval)duration   动画的持续时间,秒为单位

+ (void)setAnimationDelay:(NSTimeInterval)delay  动画延迟delay秒后再开始

+ (void)setAnimationStartDate:(NSDate *)startDate   动画的开始时间,默认为now

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve  动画的节奏控制

+ (void)setAnimationRepeatCount:(float)repeatCount  动画的重复次数

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses  如果设置为YES,代表动画每次重复执行的效果会跟上一次相反

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache  设置视图view的过渡效果, transition指定过渡类型, cache设置YES代表使用视图缓存,性能较好

2.代码示例

  1. 1 //
  2. 2 // YYViewController.m
  3. 3 // 01-uiview封装动画
  4. 4 //
  5. 5 // Created by apple on 14-6-22.
  6. 6 // Copyright (c) 2014年 itcase. All rights reserved.
  7. 7 //
  8. 8
  9. 9 #import "YYViewController.h"
  10. 10
  11. 11 @interface YYViewController ()
  12. 12 @property (weak, nonatomic) IBOutlet UIView *customView;
  13. 13
  14. 14
  15. 15 @end
  16. 16
  17. 17 @implementation YYViewController
  18. 18
  19. 19 - (void)viewDidLoad
  20. 20 {
  21. 21 [super viewDidLoad];
  22. 22
  23. 23 }
  24. 24
  25. 25 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  26. 26 {
  27. 27 //打印动画块的位置
  28. 28 NSLog(@"动画执行之前的位置:%@",NSStringFromCGPoint(self.customView.center));
  29. 29
  30. 30 //首尾式动画
  31. 31 [UIView beginAnimations:nil context:nil];
  32. 32 //执行动画
  33. 33 //设置动画执行时间
  34. 34 [UIView setAnimationDuration:2.0];
  35. 35 //设置代理
  36. 36 [UIView setAnimationDelegate:self];
  37. 37 //设置动画执行完毕调用的事件
  38. 38 [UIView setAnimationDidStopSelector:@selector(didStopAnimation)];
  39. 39 self.customView.center=CGPointMake(200, 300);
  40. 40 [UIView commitAnimations];
  41. 41
  42. 42 }
  43. 43
  44. 44 -(void)didStopAnimation
  45. 45 {
  46. 46 NSLog(@"动画执行完毕");
  47. 47 //打印动画块的位置
  48. 48 NSLog(@"动画执行之后的位置:%@",NSStringFromCGPoint(self.customView.center));
  49. 49 }
  50. 50 @end

执行结果:

    

打印动画块的位置:

3.UIView封装的动画与CALayer动画的对比

使用UIView和CALayer都能实现动画效果,但是在真实的开发中,一般还是主要使用UIView封装的动画,而很少使用CALayer的动画。

CALayer核心动画与UIView动画的区别:
UIView封装的动画执行完毕之后不会反弹。即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的。

代码示例:

  1. 1 //
  2. 2 // YYViewController.m
  3. 3 // 01-uiview封装动画
  4. 4 //
  5. 5 // Created by apple on 14-6-22.
  6. 6 // Copyright (c) 2014年 itcase. All rights reserved.
  7. 7 //
  8. 8
  9. 9 #import "YYViewController.h"
  10. 10
  11. 11 @interface YYViewController ()
  12. 12 @property (weak, nonatomic) IBOutlet UIView *customView;
  13. 13
  14. 14
  15. 15 @end
  16. 16
  17. 17 @implementation YYViewController
  18. 18
  19. 19
  20. 20
  21. 21 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  22. 22 {
  23. 23 //1.创建核心动画
  24. 24 CABasicAnimation *anima=[CABasicAnimation animation];
  25. 25 //平移
  26. 26 anima.keyPath=@"position";
  27. 27 //设置执行的动画
  28. 28 anima.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 300)];
  29. 29
  30. 30 //设置执行动画的时间
  31. 31 anima.duration=2.0;
  32. 32 //设置动画执行完毕之后不删除动画
  33. 33 anima.removedOnCompletion=NO;
  34. 34 //设置保存动画的最新状态
  35. 35 anima.fillMode=kCAFillModeForwards;
  36. 36 // anima.fillMode=kCAFillModeBackwards;
  37. 37
  38. 38 //设置动画的代理
  39. 39 anima.delegate=self;
  40. 40
  41. 41 //2.添加核心动画
  42. 42 [self.customView.layer addAnimation:anima forKey:nil];
  43. 43 }
  44. 44
  45. 45 -(void)animationDidStart:(CAAnimation *)anim
  46. 46 {
  47. 47 //打印动画块的位置
  48. 48 // NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint(self.customView.center));
  49. 49 NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint( self.customView.layer.position));
  50. 50 }
  51. 51 -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  52. 52 {
  53. 53 //打印动画块的位置
  54. 54 NSLog(@"动画执行完毕后的位置:%@",NSStringFromCGPoint( self.customView.layer.position));
  55. 55 }
  56. 56
  57. 57 @end

打印结果:

二、block动画

1.简单说明

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

参数解析:

duration:动画的持续时间

delay:动画延迟delay秒后开始

options:动画的节奏控制

animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block

转场动画

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

参数解析:

duration:动画的持续时间

view:需要进行转场动画的视图

options:转场动画的类型

animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

方法调用完毕后,相当于执行了下面两句代码:

// 添加toView到父视图

[fromView.superview addSubview:toView];

// 把fromView从父视图中移除

[fromView.superview removeFromSuperview];

参数解析:

duration:动画的持续时间

options:转场动画的类型

animations:将改变视图属性的代码放在这个block中

completion:动画结束后,会自动调用这个block

2.代码示例

  1. 1 #import "YYViewController.h"
  2. 2
  3. 3 @interface YYViewController ()
  4. 4 @property (weak, nonatomic) IBOutlet UIView *customView;
  5. 5
  6. 6 @end
  7. 7
  8. 8 @implementation YYViewController
  9. 9
  10. 10 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  11. 11 {
  12. 12 //block代码块动画
  13. 13 [UIView transitionWithView:self.customView duration:3.0 options:0 animations:^{
  14. 14 //执行的动画
  15. 15 NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint(self.customView.center));
  16. 16 self.customView.center=CGPointMake(200, 300);
  17. 17 } completion:^(BOOL finished) {
  18. 18 //动画执行完毕后的首位操作
  19. 19 NSLog(@"动画执行完毕");
  20. 20 NSLog(@"动画执行完毕后的位置:%@",NSStringFromCGPoint( self.customView.center));
  21. 21 }];
  22. 22 }
  23. 23 @end

打印结果:

提示:self.customView.layer.position和self.customView.center等价,因为position的默认值为(0.5,0.5)。

三、补充

1.UIImageView的帧动画

UIImageView可以让一系列的图片在特定的时间内按顺序显示

相关属性解析:

animationImages:要显示的图片(一个装着UIImage的NSArray)

animationDuration:完整地显示一次animationImages中的所有图片所需的时间

animationRepeatCount:动画的执行次数(默认为0,代表无限循环)

相关方法解析:

- (void)startAnimating; 开始动画

- (void)stopAnimating;  停止动画

- (BOOL)isAnimating;  是否正在运行动画

2.UIActivityIndicatorView

是一个旋转进度轮,可以用来告知用户有一个操作正在进行中,一般用initWithActivityIndicatorStyle初始化

方法解析:

- (void)startAnimating; 开始动画

- (void)stopAnimating;  停止动画

- (BOOL)isAnimating;  是否正在运行动画

UIActivityIndicatorViewStyle有3个值可供选择:

UIActivityIndicatorViewStyleWhiteLarge   //大型白色指示器

UIActivityIndicatorViewStyleWhite      //标准尺寸白色指示器

UIActivityIndicatorViewStyleGray    //灰色指示器,用于白色背景

iOS之UIview动画的更多相关文章

  1. iOS 获取UIView 动画的实时位置的方法

    [self.animationView.layer.presentationLayer frame].origin.x

  2. iOS动画篇:UIView动画

    iOS的动画效果一直都很棒很,给人的感觉就是很炫酷很流畅,起到增强用户体验的作用.在APP开发中实现动画效果有很多种方式,对于简单的应用场景,我们可以使用UIKit提供的动画来实现. UIView动画 ...

  3. iOS 开发之动画篇 - 从 UIView 动画说起

    毋庸置疑的:在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的. 本文作为动画文集的第一篇, ...

  4. iOS - UIView 动画

    1.UIView 动画 核心动画 和 UIView 动画 的区别: 核心动画一切都是假象,并不会真实的改变图层的属性值,如果以后做动画的时候,不需要与用户交互,通常用核心动画(转场). UIView ...

  5. iOS动画1 — UIView动画

    iOS动画基础是Core Animation核心动画.Core Animation是iOS平台上负责图形渲染与动画的基础设施.由于核心动画的实现比较复杂,苹果提供了实现简单动画的接口—UIView动画 ...

  6. 【iOS开发】---- UIView动画

      iOS 动画UIView动画 原文:http://www.cocoachina.com/bbs/read.php?tid=110168 1.概述 UIKit直接将动画集成到UIView类中,实现简 ...

  7. iOS核心动画以及UIView动画的介绍

    我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...

  8. 荼菜的iOS笔记--UIView的几个Block动画

    前言:我的第一篇文章荼菜的iOS笔记–Core Animation 核心动画算是比较详细讲了核心动画的用法,但是如你上篇看到的,有时我们只是想实现一些很小的动画,这时再用coreAnimation就会 ...

  9. iOS:UIView的block函数实现转场动画---双视图

    使用UIView动画函数实现转场动画——双视图 + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView durati ...

随机推荐

  1. Apache虚拟主机(vhost)配置教程

    使用apache来配置虚拟主机,在单一系统上运行多个网站. 现在很多linux主机使用apache作为web服务器的,大部分是基于这个原理来配置虚拟主机的. 下面就windows下以apache 2. ...

  2. POJ ---3070 (矩阵乘法求Fibonacci 数列)

    Fibonacci   Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2  ...

  3. bzoj 3926 [Zjoi2015]诸神眷顾的幻想乡(SAM)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3926   [题意]   给定一棵树,每个节点都有相应的颜色,且保证叶子数不超过20,问 ...

  4. Hadoop系列(一)hadoop2.2.0源码编译

    操作系统:Centos 所需条件:能上网 编译所需工具: apache-ant-1.9.2-bin.tar.gz apache-maven-3.0.5-bin.tar.gz findbugs-2.0. ...

  5. PC问题-使用BAT方法设置IP地址

    ::------以下为批处理文件内容---- @echo off ::set slection1= set/p slection1=请输入IP地址: netsh interface ip set ad ...

  6. The Dangers of JavaScript’s Automatic Semicolon Insertion

    Although JavaScript is very powerful, the language’s fundamentals do not have a very steep learning ...

  7. vbs脚本发送邮件

    NameSpace = "http://schemas.microsoft.com/cdo/configuration/"Set Email = CreateObject(&quo ...

  8. 为Android安装BusyBox

    大家是否有过这样的经历,在命令行里输入adb shell,然后使用命令操作你的手机或模拟器,但是那些命令都是常见Linux命令的阉割缩水版,用起来很不爽.是否想过在 Android上使用较完整的she ...

  9. php中的$_SERVER从哪来

    前几个月学了个tcpdump抓包命令,遇到任何问题总想试试,真是程序员的终级武器呀,它像显微镜一下,把任何的丑陋的bug都显示在你的面前. 为什么有题目中所说的疑问呢?因为我发现在不同的环境下面,我获 ...

  10. iOS 极光推送

    1.关于推送的几个证书.http://www.mobile-open.com/2016/931624.html 进入开发者中心:https://developer.apple.com/account/ ...