UIView的Animaltion

iOS动画技术:淡入淡出、延时滑动与点击颤抖实现 Core Animation框架提供了非常丰富的API来创建各种复杂的动画。开发者可以使用类及其子类来实现动画效果。淡入淡出动画主要涉及到的子类是,它允许开发者为单个属性指定一个开始值和结束值,并在这两个值之间进行插值运算,从而生成动画效果。对于想要更加精细控制动画效果的开发者来说,自定义动画曲线提供了更多的灵活性。在 UIKit 中可以通过或者来实现更复杂的动画效果,包括自定义动画的时序函数。自定义时序函数需要使用类,并可以使用其方法传入预定义的函数名称,如。 阅读详情
所谓动画效果,就是会动的画,到iOS App中来说的话,就是各种UIView的移动。 想想看,如果我们自己来实现所有UIView的动画效果,需要考虑些什么东西呢? 


* 该UIView现在在哪儿? 

* 该UIView最后会动到哪儿? 

* 该UIView以什么样的方式移动到那儿? 

* 该动画持续多长时间? 

* 每次移动的最小时间间隔? 

* 每次最小时间间隔的移动的应该移动到哪儿? 

* …. 


想想这是一个多么杀脑细胞的过程,尤其是每一次的动画过程都要重复这一折磨的过程。 


还好,现实比想象的美好, 苹果公司为开发者思考了上面的问题,通过使用UIKit提供的动画支持,开发者只需要简单的几行代码就能实现各种各样的动画效果。在UIKit中,所有的动画效果支持的方法都在UIView类中。 


首先,在UIView中有很多属性用以描述一个UIView的状态,而动画就是让UIView从一个状态平滑的过渡到另外一个状态的过程。这些属性有: 

属性名
作用
frame
控制UIView的大小和该UIView在superview中的相对位置。
bounds
控制UIView的大小
center
控制UIView的位置
transform
控制UIView的缩放,旋转角度等固定好中心位置之后的变化
alpha
控制UIView的透明度
backgroundColor
控制UIView的背景色
contentStretch
控制UIView的拉伸方式

通过设置这些属性,基本上就解决了动画中的移动到哪儿的问题。 


接着,苹果公司在UIView中加入很多方法来方便家控制动画的移动时间,以及移动的方式。iOS3.0及之前,UIView支持的Animation方法有如下这么多: 

Object-c代码
  1. @interface UIView(UIViewAnimation)

  2. + (void)beginAnimations:(NSString *)animationID context:(void *)context; // additional context info passed to will start/did stop selectors. begin/commit can be nested
  3. + (void)commitAnimations; // starts up any animations when the top level animation is commited

  4. // no getters. if called outside animation block, these setters have no effect.
  5. + (void)setAnimationDelegate:(id)delegate; // default = nil
  6. + (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context
  7. + (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
  8. + (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2
  9. + (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0
  10. + (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date])
  11. + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut
  12. + (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional
  13. + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. used if repeat count is non-zero
  14. + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

  15. + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; // current limitation - only one per begin/commit block

  16. + (void)setAnimationsEnabled:(BOOL)enabled; // ignore any attribute changes while set.
  17. + (BOOL)areAnimationsEnabled;

  18. @end
复制代码
这些方法非常的不直观,开发者还是需要花很多时间去思考怎么组合这些方法。但是自从iOS4.0提供块语法支持之后,苹果公司把动画效果的实现封装了一下,效果立杆见影,直观了许多,因此大家完全可以不用去看上面的那些方法,重点关注如下的方法:
Object-c代码
  1. @interface UIView(UIViewAnimationWithBlocks)

  2. + (void)animateWithDuration:(NSTimeInterval)duration 
  3. delay:(NSTimeInterval)delay 
  4. options:(UIViewAnimationOptions)options 
  5. animations:(void (^)(void))animations 
  6. completion:(void (^)(BOOL finished))completion;

  7. + (void)animateWithDuration:(NSTimeInterval)duration 
  8. animations:(void (^)(void))animations 
  9. completion:(void (^)(BOOL finished))completion 
  10. NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0

  11. + (void)animateWithDuration:(NSTimeInterval)duration 
  12. animations:(void (^)(void))animations
  13. NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL

  14. + (void)transitionWithView:(UIView *)view 
  15. duration:(NSTimeIntervl)duration 
  16. options:(UIViewAnimationOptins)options 
  17. animations:(void (^)(void)animations 
  18. completion:(void (^)(BOOL finished) completion 
  19. NS_AVAILABLE_IOS(4_0);

  20. + (void)transitionFromView:(UIView *)fromView 
  21. toView:(UIView *)toView 
  22. duration:(NSTimeInterval)duration 
  23. options:(UIViewAnimationOptions)options 
  24. completion:(void (^)(BOOL finished))completion
  25. NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview

  26. @end
复制代码
上面的几个方法从名字上看就非常直观。前三个方法都可以按如下的方式直译,只是后两个使用了一些默认参数而已: 
Java代码
  1. 做一个动画效果,持续时间为duration, 
  2. 延迟delay秒开始执行 ,
  3. 以options指定的方式运行这个动画,
  4. animations块中指定哪些UIView会参加本次动画效果,以及动画效果完成时这些UIView会是一个什么状态, 
  5. 动画完成之后,执行completion块进行收尾。
复制代码
有了这3个方法,开发者只需要思考,初始值,结果值,持续时间,运行方式就行了,具体的细节移动都交给类库。 

后2个方法是用于UIView相互之间转换的,个人觉得用处不大,因为用上面的三个方法同样可以做到这些效果,因此略过。 

关于UIView的动画效果支持,有2点值得一提 
* 上面所有的方法都是类方法,当调用这些方法之后,系统会新起线程执行动画效果,不会阻塞主线程的执行。 
* UIView的Animation效果只支持一些简单的2D动画效果,复杂的大家还得研究Core Animation。 

一个实战例子 
在我写的一个小游戏的主机界面中,我使用了一点动画的效果,主界面的设计图如下: 


动画后的效果图如下: 


我想要的效果就是,加载主界面后,图片缓缓的展开成扇形,然后游戏的菜单显示供玩家点击。 
代码如下: 
首先,准备动画前状态,让想展示的UIView不可见: 
Object-c代码
  1. -(void) prepareForIntroAnimation
  2. {
  3. self.sImageView.hidden=YES;
  4. self.nImageView.hidden=YES;
  5. self.aImageView.hidden=YES;
  6. self.pImageView.hidden=YES;
  7. self.jokerImageView.hidden=YES;

  8. self.hostGameButton.alpha=0.0f;
  9. self.joinGameButton.alpha=0.0f;
  10. self.singlePlayerGameButton.alpha=0.0f;
  11. self.helpButton.alpha=0.0f;
  12. _buttonsEnabled = NO;
  13. }
复制代码
然后,展示动画效果:
Object-c代码
  1. -(void) performAnimation
  2. {
  3. //显示UIView
  4. self.sImageView.hidden=NO;
  5. self.nImageView.hidden=NO;
  6. self.aImageView.hidden=NO;
  7. self.pImageView.hidden=NO;
  8. self.jokerImageView.hidden=NO;

  9. [UIView animateWithDuration:0.65f
  10. delay:0.5f
  11. options:UIViewAnimationOptionCurveEaseIn
  12. animations:^
  13. {
  14. //确定UIView的的中心位置和偏转角度
  15. self.sImageView.center = CGPointMake(80.0f, 108.0f);
  16. self.sImageView.transform = CGAffineTransformMakeRotation(-0.22f);

  17. self.nImageView.center = CGPointMake(160.0f, 93.0f);
  18. self.nImageView.transform = CGAffineTransformMakeRotation(-0.1f);

  19. self.aImageView.center = CGPointMake(240.0f, 88.0f);

  20. self.pImageView.center = CGPointMake(320.0f, 93.0f);
  21. self.pImageView.transform = CGAffineTransformMakeRotation(0.1f);

  22. self.jokerImageView.center = CGPointMake(400.0f, 108.0f);
  23. self.jokerImageView.transform = CGAffineTransformMakeRotation(0.22f);
  24. }
  25. completion:nil];

  26. [UIView animateWithDuration:0.5f
  27. delay:1.0f
  28. options:UIViewAnimationOptionCurveEaseOut
  29. animations:^
  30. {
  31. //透明度设置为1,显示游戏菜单。
  32. self.hostGameButton.alpha = 1.0f;
  33. self.joinGameButton.alpha = 1.0f;
  34. self.singlePlayerGameButton.alpha = 1.0f;
  35. self.helpButton.alpha = 1.0f;
  36. }
  37. completion:^(BOOL finished)
  38. {
  39. _buttonsEnabled = YES;
  40. }];

  41. }
复制代码
另外,动画效果还可以使用completion的回调块做连接,完成多个动画效果的连接。
深入理解UIViewAnimation与Core Animation的CATransition类 本文还有配套的精品资源,点击获取 简介:在iOS开发中,动画增强了用户界面的交互性和视觉吸引力。本文深入探讨 UIViewAnimation 和 Core Animation ,特别是 CATransition 类,解释它们如何协同工作创建动态效果。 UIViewAnimation 提供了基础动画API,用于实现简单的... 阅读详情

相关推荐

CoaXPress协议入门(1)---- CXP测试套件

CoaXPress (简称CXP)是指一种采用同轴线缆进行互联的相机数据传输标准,主要用于替代之前的Camera Link协议,常见于科学相机、工业相机、医学图像、航空防务等场景。CXP是一个非对称的高速点对点串行传输协议,主要用于传输视频和静态图像,线缆多使用单条或多条同轴电缆。CXP易于集成,可以获得灵活可靠的性能,通过使用标准的同轴线缆,比如RG59 和 RG6规格(推荐使用RG6),并且图像、控制通讯、触发、电源都可以使用同一条线缆。

素手挽剑 9506

UIView的Animation效果

所谓动画效果,就是会动的画,到iOS App中来说的话,就是各种UIView的移动。 想想看,如果我们自己来实现所有UIView的动画效果,需要考虑些什么东西呢? * 该UIView现在在哪儿? * 该UIView最后会动到哪儿? * 该UIView以什么样的方式移动到那儿? * 该动画持续多长时间? * 每次移动的最小时间间隔? * 每次最小时间间隔的移动的应该移动到哪儿? *...

ningandjin的专栏 204

电机控制易混知识点1-基波频率/载波频率/采样频率

在电机控制学习工作中会接触到很多专业名词,其中基波频率,载波频率,采样频率是最常接触到的,特别对于电机控制小白开说,不容易理解,现对这几个概念做下总结归纳。

新能源电机控制工程师 | 聚焦实战问题,搭建互助平台 分享电机控制代码调试、现场故障排查、算法优化中的真实困惑;开放讨论电机基础知识以及工作中遇到难点等共性难题。拒绝单向输出,只做工程师的“技术树洞”与“解忧杂货铺”! 2190

Animal Island UI核心组件揭秘:10个必学的森系界面元素

Animal Island UI是一款深受任天堂《集合啦!动物森友会》游戏界面启发的React组件库,它将游戏中的森系美学与现代UI设计完美融合,为开发者提供了一系列可爱又实用的界面元素。本文将带你探索这个组件库中10个必学的核心组件,帮助你快速打造出充满温馨氛围的森系界面。 [![Animal Island UI标志](https://raw.gitcode.com/gh_mirrors/an

gitblog_00911的博客 999

5G中的RedCap

5G中的redcap

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 2527

双有源桥变换器(DAB)TPS控制:从理论建模到Simulink/PSIM仿真实践

本文深入探讨了双有源桥变换器(DAB)的三重移相(TPS)控制技术,从理论建模到仿真实现。文章详细分析了TPS相比SPS和DPS的优势,阐述了其12种工况的划分逻辑与电流应力最优调制策略,并提供了在Simulink和PSIM平台搭建仿真模型的详细步骤与实战经验,帮助工程师掌握这一高效控制方法。

white的博客 583

iOS UIView Animation动画

1. UIView属性动画 常用方法animateWithDuration duration,动画时间 delay,动画在延迟多久之后执行 options,动画的展示方式 animations,动画代码 completion,动画完成后代码 // 动画时间,,options,completion + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnim

假装你是大灰狼的专栏 2877

ARM SMMUv3设备树配置实战:从零开始为RK3588搭建IOMMU环境

本文详细介绍了在RK3588平台上配置ARM SMMUv3设备树的实战经验。从理解硬件架构、设备树节点定义,到内核驱动集成与调试,提供了完整的IOMMU环境搭建指南,并分享了解决StreamID冲突、中断配置等常见问题的技巧,帮助开发者高效完成控制器初始化。

l3m4n的博客 883

Unity基于UIWidgets的UI入门(二简单的入门)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

baidu_39408863的博客 446

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2575

学Simulink——基于Simulink的超前-滞后校正控制器设计与仿真建模示例

本文完成了基于 Simulink 的超前-滞后校正控制器设计与仿真,实现了:✅掌握超前与滞后校正的物理意义与设计流程✅分步设计复合控制器,兼顾动态与稳态✅在 Simulink 中搭建闭环系统并验证卓越性能✅达成高稳定裕度、高精度、快速响应三大目标。

xiaoheshang_123的博客 77

Unity UGUI SuperScrollView介绍

UGUI SuperScrollView插件详解

R3333355726856的博客 9561

Python爬虫实战:利用最新技术爬取B站视频信息

本文详细介绍了如何使用Python最新技术构建一个功能完善的B站视频信息爬虫。我们从基础爬取开始,逐步深入到反反爬策略、异步处理、数据存储和分析等高级主题。更智能的反反爬策略:使用机器学习识别验证码更高效的分布式架构:结合Kubernetes实现弹性伸缩实时数据管道:将爬取的数据实时推送到数据分析平台多平台支持:扩展支持抖音、YouTube等其他视频平台。

2201_76125261的博客 1040

UIView 中常见的方法总结

addSubview: 添加一个子视图到接收者并让它在最上面显示出来。 - (void)addSubview:(UIView *)view 讨论 这方法同样设置了接收者为下一个视图响应对象。接收者保留视图。如果你使用removeFromSuperview方法用来把视图移除他的显示列表,那么视图将会被释放。如果你想要在视图移除显示列表後保留并使用这个视图(如果,举个例子,你想要交换一些视图的位置。)...

weixin_33806509的博客 239

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

iOS动画篇:UIView动画

iOS的动画效果一直都很棒很,给人的感觉就是很炫酷很流畅,起到增强用户体验的作用。在APP开发中实现动画效果有很多种方式,对于简单的应用场景,我们可以使用UIKit提供的动画来实现。 UIView动画简介 UIView动画实质上是对CoreAnimation的封装,提供简洁的动画接口。 UIView动画可以设置的动画属性有: 1、大小变化(frame) 2、拉伸变化(

烽火连城的博客 615

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iOS-UIViewAnimations使用详解

前言我们在iOS开发的过程中,如果不想使APP显得太过生硬,往往会使用动画,动画又分为很多种,有CABasicAnimation,CAKeyframeAnimation等组合动画,还有imageview的动画,还有UIBezierPath绘制的动画等等,这里面我主要说说animations,我们常用的简单的小动画。animations动画主要有以下几种:    [UIView animateWit

ZFJ_张福杰 3512

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

UIViewAnimationOptions

有时候想用UIview写出不是匀速的动画, UIView.animate(withDuration: duration, delay: 0.0, options: .curveEaseOut, animations: { [weak self] in }) { (_) in } 参数options是UIViewAnimationOpti...

weixin_30737363的博客 178

CALayer 动画

http://www.cocoachina.com/ios/20141022/10005.html 包括各种动画 1.常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动。 UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互。...

weixin_30657541的博客 221

iOS动画进阶(十)缓冲

缓冲 生活和艺术一样,最美的永远是曲线。 -- 爱德华布尔沃 - 利顿 在第九章“图层时间”中,我们讨论了动画时间和CAMediaTiming协议。现在我们来看一下另一个和时间相关的机制--所谓的缓冲。Core Animation使用缓冲来使动画移动更平滑更自然,而不是看起来的那种机械和人工,在这一章我们将要研究如何对你的动画控制和自定义缓冲曲线。 动画速度 动画实际上

mianhuaijiaju的专栏 919

iOS动画曲线详解(UIView Animation Curves)

前言iOS应用中比较性感的动画,一般都不是匀速的。通俗的描述有:先快后慢,先慢后快,弹簧式的,不规则运动的,等等。本文针对这几种情况进行分解,内容包括:...

Ethan_LG的专栏 9474

十二.核心动画 - 动画缓冲①(框架提供的缓存函数)

本篇博客我们介绍了图层动画和视图动画的缓冲函数,列举了一些常用的缓冲函数及其使用效果,最后我们讨论了关键帧动画缓存函数的设置方案。不过对于动画的缓冲来说,这仅仅是一个开始,后面的博客我们将开始更加深入的探讨CAMediaTimingFunction是如何工作的,并且我们该如何自定义一个更适合自己动画的缓冲函数。

weixin_39339407的博客 981

iOS 动画讲解(一)之UIView动画

IOS UIView 动画:

u012111353的博客 493

iOS动画开发之一——UIViewAnimation动画的使用

本文转载自 https://yq.aliyun.com/articles/39230?spm=a2c4e.11155435.0.0.5b7d5fd1zU7j4d iOS动画开发之一——UIViewAnimation动画的使用 一、简介 一款APP的成功与否,除了完善的功能外,用户体验也占有极大的比重,动画的合理运用,可以很好的增强用户体验。iOS...

weixin_33857230的博客 259

【动画1】UIView动画

讲一下动画。将分为以下5篇博客。 一)UIView动画 二)Layer动画 三)3D动画 四)转场动画 五)第三方动画框架 一)UIView动画 UIKit已经给我们封装了动画,即UIView动画,使用起来十分方便: [UIView animateWithDuration:2.0 animations:^{ CGPoint point = CGP

dolacmeng的专栏 1004

iOS 动画专题(UIView二维形变动画与CAAnimation核心动画)

1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动画,基于CAAnimation及其子类的动画,基于CG的动画。这篇文章着重总结前两种动画。 2. UIView动画 设置UIView形变动画有两种常见用到的属性,.frame,.transform,所以有的人也可以分别称之为: ① frame动画 ② transform动画 这两种动画只需要在...

H.A.N的博客 1689
上一篇: NSRange and NSString对象
下一篇: iOS源码:实例开发推荐
SKyu4
博客等级 码龄12年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值