简介

在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. 对原生js的一些小尝试

    意图仿造JQ操作以及弄个个人工具箱,不断完善中,代码均为个人摸索,所以肯定会有不少不足的地方,希望读者们能提出来. var xzhUtils = { //-----DOM对象添加类----- //-- ...

  2. wget www.baidu.com执行流程分析

    下载网页的关键函数: main.c(main) b 1394 url_parse:解析url,获取url相关信息,返回结构体 struct url 的指针,存于 url_parsed retrieve ...

  3. 20.org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

    org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua ...

  4. 深入GDI图像显示

    摘  要:本文首先给出了一种结合了DIB和DDB两种位图优点的图像显示方法,其次对GDI函数的高级应用,如透明位图显示.图像旋转显示.图像镜像显示进行了研究. 关键词:GDI图像显示,特殊GDI函数的 ...

  5. wpf中的触发器详解

    原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...

  6. CCNA实验(1) -- 基本配置

    Ctrl+A: 到行首(Ahead)Ctrl+E: 到行尾(End)Esc+B: 回退一个单词(Back)Esc+F: 前进一个单词(Forward) 1.三种配置模式2.时间时区配置3.设置超时时间 ...

  7. [Leetcode][Python]36: Valid Sudoku

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 36: Valid Sudokuhttps://oj.leetcode.com ...

  8. Billboard(线段树)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 【MongoDB数据库】MongoDB 命令入门初探

    MongoDB是一款NoSql数据库,使用了"面向集合"(Collection-Oriented)原理,意思是数据被分组存储在数据集中,被称为一个集合(Collection).每一 ...

  10. VlanTrunk

    简单的vlan trunk的配置: 第一步:添加vlan 1 Switch>enable 2 Switch#show vlan VLAN Name Status Ports ---- ----- ...