简介

在UIKit中,对UIView封装了很多类方法来进行简单的动画实现,在动画过程中,通过对属性值的修改来完成一系列的效果。
在IOS4以前,主要通过
+ beginAnimation
+ setAnimationDuration:设置动画时长
+ setAnimationDelay:设置延迟时间
+ setAnimationDelegate:设置代理

code..... 写入一些属性改变例如仿射变换,透明度等

+ commitAnimation

代理可以监听一些事件,比如动画结束后,可以调用代理方法进行一系列处理。

在IOS4以后,伴随着Block语法,有了更好的方法
+ animateWithDuration:delay:options:animations:completion:

前两个属性前面见过,第三个属性主要设置动画的速度效果,比如渐入渐出(EaseInOut),匀速(Linear)等
animations后面是一个块语法,设置动画的相关效果。
completion后面也是一个块语法,设置动画完成后执行的代码。

简单的位移动画


- (void)translateAnimation
{
[UIView animateWithDuration:1
delay:1
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
_imageView.center = CGPointMake(270, 410);
} completion:^(BOOL finished) {
NSLog(@"done");
}];
}

这个方法实现了通过设置属性的位移动画


我们还可以通过这个类方法对透明度,大小等等几乎所有属性进行改变增加动画效果

增加仿射变换


- (void)transformAnimation
{
[UIView animateWithDuration:3
delay:1
options:UIViewAnimationOptionCurveEaseIn
animations:^{
_imageView.center = CGPointMake(270, 410);
_imageView.transform = CGAffineTransformRotate(CGAffineTransformScale(_imageView.transform, 0.6, 0.6), M_PI);
_imageView.alpha = 0.0;
} completion:^(BOOL finished) {
NSLog(@"done");
}];
}

在这个方法中,对UIImageView的transform属性设置进行了嵌套,在旋转180度的同时进行了缩放。由于设置了alpha,所以也还有一个渐渐消失的效果。

一般来说,如果通过设置alpha为0后,需要从父视图中remove掉这个对象。

利用completion设置连续动画


- (void)transformAnimation
{
[UIView animateWithDuration:3
delay:1
options:UIViewAnimationOptionCurveEaseIn
animations:^{
_imageView.center = CGPointMake(270, 410);
_imageView.transform = CGAffineTransformRotate(CGAffineTransformScale(_imageView.transform, 0.6, 0.6), M_PI);
_imageView.alpha = 0.0;
} completion:^(BOOL finished) {
NSLog(@"done");
[UIView animateWithDuration:3
delay:0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
_imageView.center = CGPointMake(50, 50);
_imageView.transform = CGAffineTransformIdentity;
_imageView.alpha = 1.0;
} completion:nil];
}];
}

我们在上个方法的基础上进行了修改,在completion中又加入了一个动画效果,使这个图片恢复到最初的状态。
这里面CGAffineTransformIdentity为单位矩阵,是他的transform属性回复到原貌。

利用NSTimer完成连续动画


我们也可以使用定时器来完成连续动画效果

先增加两个私有成员,并且可以根据调试效果来设置_step初值

@interface ViewController ()
{
NSTimer *_timer;
NSInteger _step;
}

然后是方法


- (void)timerAnimation
{
_timer = [NSTimer scheduledTimerWithTimeInterval:0.05
target:self
selector:@selector(animateWithTimer)
userInfo:nil
repeats:YES];
} - (void)animateWithTimer
{
if (_step == 0) {
[_timer invalidate];
[_imageView removeFromSuperview];
} _imageView.transform = CGAffineTransformRotate(CGAffineTransformScale(_imageView.transform, 0.98, 0.98), ((10 * M_PI) / 180.0));
_imageView.alpha *= 0.98;
_step--;
}

虽然没有使用UIView封装的方法,但是也简单的实现了一个动画效果。




以上就是本篇博客全部内容,欢迎指正和交流。转载注明出处~

UIKit封装的系统动画的更多相关文章

  1. iOS_SN_push/pop转场动画封装和一般动画封装

    封装类中的方法: #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface AnimationE ...

  2. 第一百四十二节,JavaScript,封装库--运动动画和透明度动画

    JavaScript,封装库--运动动画和透明度动画 /** yi_dong_tou_ming()方法,说明 * * yi_dong_tou_ming()方法,将一个元素,进行一下动画操作 * 1,x ...

  3. JS---案例:手风琴 (利用封装好的动画函数)

    案例:手风琴     封装好的动画函数在common.js里面     //function getStyle(element, attr) {...}     //function animate( ...

  4. 用虚拟机封装win10系统的一些记录

    想用虚拟机封装一个WIN10企业LTSC,期间参考了IT天空小鱼儿的几大步骤一直到手动优化完,后面就自己用系统安装直接备份了一个.gho镜像.期间出过好多毛病,不过总算是成功实现了.注意点: 1.前面 ...

  5. iOS UIKit:viewController之动画(5)

    当弹出一个view controller时,UIKit提供了一些标准转换动画,并且也支持用户自定义的动画效果. 1 UIView动画 UIView是自带动画实现功能,其中有两种方式实现:        ...

  6. SDL封装的系统操作(转载)

    Andrew Haung bluedrum@163.com SDL封装很多操作系统的功能,为了保证SDL程序可移植性,最好尽量用这一些封装函数,哪果没有的话,才使用各种操作本地函数.  对于如何封各个 ...

  7. 封装win7系统、制作win7GHO镜像、制作一个自定义的镜像文件具体步骤、制作Win10镜像gho

    作者:导演你让灰太狼吃只羊 来源:CSDN 原文:https://blog.csdn.net/qq_35057426/article/details/83015516 版权声明:本文为博主原创文章,转 ...

  8. uiview封装的基本动画

    基本动画的类型为 基本动画的节奏 UIViewAnimationOptionCurveEaseInOut            = 0 << 16, // default UIViewAn ...

  9. js 封装一个均速动画函数

    //动画函数---任意一个元素移动到指定的目标位置 //element为元素 target为位置 function carToon(element, target) { //设置一个定时器让他循环去增 ...

随机推荐

  1. 数据库合并数据sql

    1.sql2000中只能用自定义的函数解决 )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') go )) ) as begin ) select @str = ...

  2. 無塵室(Clean Room)的級數標準規格

    無塵室又稱潔淨室,是將一定空間範圍內空氣的微塵粒子.有害氣體.細菌等之污染物控制在一定的數量內.無塵室的等級是以一立方英呎含有多少大於0.5um的微塵粒子來定義的.下表是根據「美國聯邦標準209D規格 ...

  3. 如何在Delphi中调用VC6.0开发的COM

    上次写了如何在VC6.0下对Delphi写的COM进行调用,原本想马上写如何在Delphi中调用VC6.0开发的COM时,由于在写事例程序中碰到了个很怪的问题,在我机子上用VC写的接口程序编译能通过. ...

  4. cdoj 847 方老师与栈 火车进出战问题

    //其实我是不想写这题的,但是这题让我想起了我年轻的时候 解法:直接模拟栈就好. //另外我年轻时候做的那题数据范围比较小,原理也不一样. //对于序列中的任何一个数其后面所有比它小的数应该是倒序的, ...

  5. 编译时出现clock skew detected, your build may be incompeleted

    错误原因为文件修改时间大于系统时间,这时候如果date输出系统时间,会发现这个时间是错误的.在nachos实习时多次出现这个错误,简单的方法尝试make多次直到有一次出现'nachos' is up ...

  6. CF 293 E Close Vertices (树的分治+树状数组)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出一棵树,问有多少条路径权值和不大于w,长 ...

  7. #include <string>

    1 append(string T&);字符串拼接 2 c_str string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址. 3 empty() ...

  8. B树、B-树、B+树、B*树都是什么(转)

    B树        即二叉搜索树:        1.所有非叶子结点至多拥有两个儿子(Left和Right):        2.所有结点存储一个关键字:        3.非叶子结点的左指针指向小于 ...

  9. JAVA 内存的认识【转】

    [转]:http://blog.sina.com.cn/s/blog_68158ebf0100wp83.html 一.Java内存的构成     先上一个官方java document里的图: 由上图 ...

  10. Spring中注入List,Set,Map,Properties的xml文件配置方法

    下面的例子展示了如何注入 List – <list/> Set – <set/> Map – <map/> Properties – <props/> ...