UIKit封装的系统动画

简介


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

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

+ commitAnimation

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

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

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

简单的位移动画


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

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

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

增加仿射变换


- (void)transformAnimation
{[UIView animateWithDuration:3delay:1options:UIViewAnimationOptionCurveEaseInanimations:^{_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:3delay:1options:UIViewAnimationOptionCurveEaseInanimations:^{_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:3delay:0options:UIViewAnimationOptionCurveEaseInanimations:^{_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.05target:selfselector:@selector(animateWithTimer)userInfo:nilrepeats: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封装的方法,但是也简单的实现了一个动画效果。



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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MS SQL Server2008大数、小数转varchar

HTJE在表中的字段类型为float(53) 试了下str, cast和convert,发现对于小数或大数,多少都存在一些问题,最后经过尝试终于找到一种满意的答案: select cast(HTJE as decimal(20,2)) from T_HTGL where ID 1002993 对于金额部分&…

oracle那些基本知识

Oracle创建表空间、创建用户以及授权 、查看权限 rownum 分页查询 它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能…

JSON.parse 解析json字符串时,遇换行符报错

Json字符串转换成Json对象时候,有两种方式: 假设d是json字符串: 1,eval(( d ))。 2,JSON.parse(d); 但是以上方式有隐患,如果Json字符串有换行的话,这样转换就会报错。 假如有…

jqueryui dialog asp.net服务端控件失效问题解决

最近使用jQuery Dialog做添加功能,发现服务端控件全部失效。 查资料是因为Dialog层被appendto 到了 body里,不在form里。 但网上给的解决方案我都不满意,觉得jQueryUI不会忽略这个问题,就查了API。 发现这个属性appendTo $( "…

用ASP生成RSS

<% Response.Clear Response.CharSet"gb2312" 数据集 Response.ContentType"text/xml" 数据流格式定义 Response.Write "<?xml version""1.0"" encoding""gb2312""?>"&vbNewLinesRssHea…

PHP中全局变量的使用global和$GLOBALS[]

From: http://blog.csdn.net/happyqyt/article/details/7219889 用PHP开发项目&#xff0c;不可避免的会使用到全局变量&#xff0c;比如一些网站的配置信息&#xff0c;全站通用&#xff0c;那就可以在一个地方设置&#xff0c;然后多个地方调用。 把变量定义为全局变量可以有…

PHP中常见错误

1、Notice: Undefined variable: 变量名 in 注&#xff1a;使用了一个没有被定义的变量 2、Parse error: syntax error, unexpected T_ELSE in If () { }Else if () { } Echo $test; Else { } 注&#xff1a;是 if else if else 句式错误 3、Parse error: syntax er…

文件I/O和标准I/O的区别

一、先来了解下什么是文件I/O和标准I/O&#xff1a; 文件I/O&#xff1a;文件I/O称之为不带缓存的IO&#xff08;unbuffered I/O)。不带缓存指的是每个read&#xff0c;write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务&#xff0c;与os…

程序集、应用程序配置及App.config和YourSoft.exe.config .

转自&#xff1a;http://www.cnblogs.com/luminji/archive/2010/10/21/1857339.html 什么是程序集 程序集标识属性 强名称的程序集 强名称工作原理配置文件使用 DEVPATH 查找程序集指定要使用的运行库版本Appconfig和YourSoftexeconfig本章概要&#xff1a; 1&#xff1a;什么是…

用GDB调试程序(一)

GDB概述 ———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许&#xff0c;各位比较喜欢那种图形界面方式的&#xff0c;像VC、BCB等IDE的调试&#xff0c;但如果你是在UNIX平台下做软件&#xff0c;你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大…

程序员必须注意的十大编程禁忌

一、不提升非技术技能我们认为非技术技能是项目成功的主要因素。这些非技术技能也可以称之为“软技能”&#xff0c;总体上来说&#xff0c;它已经被公司证明为能够驾驭企业和客户之间的长期商业关系&#xff0c;因此也能决定公司的成长发展路径。一些关键的软技能指标包括&…

Linux 系统应用编程——出错处理(errno)

1. errno变量 文件 <errno.h> 中定义了符号 errno 以及可以赋予它的各种常量,这些常量都是以字符 E 开头。例如,若 errno 等于常量 EACCES,表示产生了权限问题(例如,没有打开所要求文件的足够权限)。 当 UNIX 函数出错时,常常返回一个负值,而且将整型变量 errno 设置…

有关MSHTML

http://msdn.microsoft.com/zh-HK/library/aa741322有关MHTML的接口参考文档转载于:https://blog.51cto.com/amcto111/1284453

[Android]在Dagger 2中使用RxJava来进行异步注入(翻译)

以下内容为原创&#xff0c;欢迎转载&#xff0c;转载请注明 来自天天博客&#xff1a;http://www.cnblogs.com/tiantianbyconan/p/6236646.html 在Dagger 2中使用RxJava来进行异步注入 原文&#xff1a;http://frogermcs.github.io/async-injection-in-dagger-2-with-rxjava 几…

关于Go语言在服务端做Restful接口和socket通信

请到我的个人博客看golang rest相关文章 http://xiaorui.cc关于Go语言在服务端做Restful接口和socket通信已经转到: http://xiaorui.cc/2014/10/25/%E5%85%B3%E4%BA%8Ego%E8%AF%AD%E8%A8%80%E5%9C%A8%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%81%9Arestful%E6%8E%A5%E5%8F%A3%E5%92%8C…

Linux 系统应用编程——文件I/O

Linux操作系统是基于文件概念的。文件是以字符序列构成的信息载体。根据这一点&#xff0c;可以把I/O设备当做文件来处理&#xff0c;因此&#xff0c;在磁盘上的普通文件进行交互所用的统一系统调用可以直接用于I/O设备。这样大大简化了系统对于不同设备的处理&#xff0c;提高…

Socket模型详解

Socket模型详解 Winsock 的I/O操作&#xff1a;1、两种I/O模式 阻塞模式&#xff1a;执行I/O操作完成前会一直进行等待&#xff0c;不会将控制权交给程序。套接字默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式&#xff1a;执行I/O操作时&#xff0c;Winsock函数会…

UVa 11136 - Hoax or what

题目大意&#xff1a;超市进行促销活动&#xff0c;顾客可以把账单放到一个箱子里&#xff0c;每天超市会从箱子中抽出最高消费者和最低消费者&#xff0c;最高消费者可以得到&#xff08;最高消费-最低消费&#xff09;的金钱。询问超市在n天的促销活动结束后应支付多少钱。 找…

静态库和动态库的分析

在Linux操作系统中&#xff0c;普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式。ELF&#xff08;Executable and Linking Format&#xff0c;可执行连接格式&#xff09;。 ELF文件格式包括三种主要的类型&#xff1a;可执行文件、可重定向文件、共享库&#xff1…