iOS动画开发之二——UIView动画执行的另一种方式

iOS动画开发之二——UIView动画执行的另一种方式

        上一篇博客中介绍了UIView的一些常用动画,通过block块,我们可以很方便简洁的创建出动画效果:http://my.oschina.net/u/2340880/blog/484457,这篇博客再介绍一种更加传统的执行UIView的动画的方法。

        这种方式相比如block的方式,显得要麻烦一些,apple官方也推荐我们使用带block的创建动画的方式,我们可以将编程重心更多的放在动画逻辑的实现上。使用begin和commit方式主要分为三个步骤:

    一、设置动画开始

[UIView beginAnimations:@"test" context:nil];

这个函数中的两个参数,第一个用于设置一个动画的标识id,通常第二个参数写为nil。

    二、动画执行的参数设置

+ (void)setAnimationDelegate:(id)delegate; 

    设置这个动画的代理,用于执行动画开始或者结束后的动作

+ (void)setAnimationWillStartSelector:(SEL)selector; 

    设置动画开始时执行的回调

+ (void)setAnimationDidStopSelector:(SEL)selector;

设置动画结束后执行的回调

+ (void)setAnimationDuration:(NSTimeInterval)duration;

    设置动画执行的时间

+ (void)setAnimationDelay:(NSTimeInterval)delay; 

    设置延时执行的延时

+ (void)setAnimationStartDate:(NSDate *)startDate; 

    给动画设置一个启示时间

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve; 

    设置动画播放的线性效果,UIViewAnimationCurve的枚举如下:

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
    UIViewAnimationCurveEaseInOut,         // 淡入淡出
    UIViewAnimationCurveEaseIn,            // 淡入
    UIViewAnimationCurveEaseOut,           // 淡出
    UIViewAnimationCurveLinear            //线性
}

+ (void)setAnimationRepeatCount:(float)repeatCount; 

    设置动画循环播放次数

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;

    设置动画逆向执行

    三、提交动画

+ (void)commitAnimations;

    例如:

UIView * view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    [self.view addSubview:view];
    view.backgroundColor=[UIColor redColor];
    [UIView beginAnimations:@"test" context:nil];
    [UIView setAnimationDuration:3];
    view.backgroundColor=[UIColor orangeColor];
    [UIView commitAnimations];//执行commit后,动画即开始执行

一点建议:这种创建UIView动画的方式和上一篇博客中的block方式效果相同,然而效率并不高,写的代码也会繁琐冗长,在开发中,如果没有特殊的兼容要求,使用block的方式会更高效方便。   

专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信小开发

五分钟掌握微信小程序轮播图

从公共库v1.4.0开始,change事件返回detail中包含一个source字段,表示导致变更的原因,可能值如下: autoplay 自动播放导致 swip...

2286
来自专栏飞扬的花生

一步一步学习Bootstrap系列--表单布局

前言:Bootstrap 属于前端 ui 库,通过现成的ui组件能够迅速搭建前端页面,简直是我们后端开发的福音,通过几个项目的锻炼有必要总结些常用的知识,本篇把...

29810
来自专栏Alice

iOS textfield实现一行的数字限制,超出进行弹框

步骤一:添加textfield协议‘ @interface LsGeXingQianMingVC ()<UITextFieldDelegate>  步骤2:设置...

2167
来自专栏前端杂货铺

不要给<a>设置outline:none

outline属性有什么作用     原文链接 a{outline:none} do not do it     当用户使用tab键进行链接切换时,该属性会在当...

5085
来自专栏安富莱嵌入式技术分享

【二代示波器教程】第11章 示波器设计—功能模块划分

二代示波器的界面上做了五个按钮,分别用于不同功能的配置,本章节就为大家讲解这五个按钮实现的功能。

1162
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

React Native按钮详解|Touchable系列组件使用详解

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) 在做App开发过程中离不了的需要用户交互,说到交互,...

5537
来自专栏青玉伏案

iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果

  在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的。在之...

2118
来自专栏Scott_Mr 个人专栏

React Native 系列(八) -- 导航

5308
来自专栏糊一笑

移动端APP列表点透事件处理方法

关于点透事件这里不再赘述,如果不清楚的可以上网搜一搜,或者看小火柴的这篇文章。 这里是自己在做移动端时,在列表滑动的时候,遇到的点透问题。出现这个问题的来由是因...

3695
来自专栏python学习指南

Python爬虫(二十四)_selenium案例:执行javascript脚本

本章叫介绍如何使用selenium在浏览器中使用js脚本,更多内容请参考:Python学习指南 隐藏百度图片 #-*- coding:utf-8 -*- ...

22310

扫码关注云+社区

领取腾讯云代金券