iOS动画浅析

概述

iOS动画主要有三种调用方式:

1. UIView的动画代码块

2. UIView [begin, commit]模式

3. CABasicAnimation方法

UIView Animation

代码块调用

[UIView animateWithDuration:timeInterval animations:^{
weakTableView.frame = CGRectMake(0, -height, weakSelf.frame.size.width, height);
[weakTableView setAlpha:0];
}];

注意:在代码块中对对象的引用要用申明成__weak,否则会引起内存泄露。

[begin, commit]模式

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:timeInterval];
[view setHidden:hide];
[UIView commitAnimations];

开始/结束动画消息定义形式:

//开始动画
-(void)animationDidStart:(NSString *)animationID context:(void *)context
//结束动画
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

两种方式对比

  • 通过代码块实现动画,使用 UIViewAnimationOptionCurveEaseInOut 和UIViewAnimationOptionTransitionNone animation选项。在动画的播放过程中,用户的交互暂时不可用。
  • 通过[begin,commit]模式进行动画的设置,较之代码块的方式,此种方式更加灵活,可以配置更多的选项。另外,通过animationID和context参数可以配置动画开始/结束时调用的方法。

CABasicAnimation

常用键值

注:键值对应于CALayer的相关属性,通过改变这些属性的值实现动画效果。

  • transform.scale.x
    宽的比例转换
  • transform.scale.y
    高的比例转换
  • transform.rotation.z
    平面圆的旋转
  • opacity 透明度
  • margin 在视图中展示内容的大小
  • zPosition 屏幕上层次的前后顺序
  • backgroundColor 背景颜色
  • cornerRadius 圆角
  • borderWidth 边的宽度
  • bounds layer的边界矩阵, 与frame类似
  • contents 内容, 例如:图片的变化
  • contentsRect 内容可使用layer的大小
  • frame 视图的frame矩阵
  • hidden 隐藏状态
  • mask 遮挡背景和内容显示的透明度
  • masksToBounds 决定子layer是否从layer的边界中剪除
  • position layer在其父layer中对应的位置
  • shadowColor 阴影颜色
  • shadowOffset 阴影偏移量
  • shadowOpacity 阴影透明度
  • shadowRadius 阴影圆角

调用方法

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];

时间函数

设置方法

animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

常用函数

  • kCAMediaTimingFunctionLinear
    线性递增
  • kCAMediaTimingFunctionEaseIn
    慢进快出,即动画开始时缓慢,然后逐渐加速
  • kCAMediaTimingFunctionEaseOut
    快进慢出,即动画开始时速度较快,然后逐渐缓慢
  • kCAMediaTimingFunctionEaseInEaseOut
    慢进-加速-慢出
  • kCAMediaTimingFunctionDefault
    使用控制点[(0.0,0.0), (0.25,0.1), (0.25,0.1), (1.0,1.0)],需要保证动画使用默认的计时

循环播放动画的两种方式

定时器

NSTimer

创建/启动

NSTimer *timer = [NSTimer
scheduledTimerWithTimeInterval:timeInterval
target:self.animationCollections
selector:animationSelector
userInfo:nil
repeats:YES];

停止

[timer invalidate];
timer = nil;

CADiplayLink

创建/启动

CADisplayLink *display = [CADisplayLink displayLinkWithTarget:self.animationCollections selector:animationSelector];
[display addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

停止

[player invalidate];
timer = nil;

循环播放

CABasicAnimation

animation.repeatCount = FLT_MAX;
animaiton.removedOnCompletion = NO;

代码实例

在实例代码中实现了一下几种动画效果:

  1. 渐入/渐出;
  2. 闪烁;
  3. 下拉/收缩菜单;
  4. 移动;
  5. 放大/缩小
  6. 匀速旋转;
  7. 3D旋转;
  8. 时钟;
  9. 快速旋转;

效果

时间: 2024-10-15 18:39:56

iOS动画浅析的相关文章

动画浅析-CAAnimation和CATransition

出处: http://blog.csdn.net/mad2man/article/details/17260887 现在明白了,要做动画.需要用到CATransition类! 那就学习一下吧! 先贴一个入门代码! [_imgPic setImage:image];// 设置新的图片 CATransition *animation = [CATransition animation]; [animation setDuration:1.0]; [animation setFillMode:kCAF

如何解决IOS 动画中 Autolayout 与View Transforms的冲突

IOS 的动画放大与缩小,并非按照找它的中心点放大和缩小,而是左上角 .我分析了下原来是Autolayout 与View Transforms的冲突造成的. - (void) addSubviewWithZoomInAnimation:(UIView*)view duration:(float)secs option:(UIViewAnimationOptions)option { // first reduce the view to 1/100th of its original dimen

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

iOS动画开发之一--UIViewAnimation动画的使用 一.简介 一款APP的成功与否,除了完善的功能外,用户体验也占有极大的比重,动画的合理运用,可以很好的增强用户体验.iOS开发中,常用的动画处理有UIView动画编程和核心动画编程,其中UIView动画使用简便,开发中应用十分广泛.这篇博客,主要讨论UIView的动画使用. 二.UIView动画的几个方法 + (void)animateWithDuration:(NSTimeInterval)duration animations:

iOS动画的要素

1)iOS动画的模型:三层树模型: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/CoreAnimationBasics/CoreAnimationBasics.html#//apple_ref/doc/uid/TP40004514-CH2-SW12 Layer Trees Reflect Different Aspects of the Animati

iOS动画浅汇

转自:http://www.cocoachina.com/ios/20160311/15660.html 在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的.我们总是追求更为酷炫的实现,如果足够仔细,我们不难发现一个好的动画通过步骤分解后本质上不过是一个个简单的动画实现.本文就个人搜集的一些动画相关的理论和实践知识做个小结,不足之处请勿见怪. 理论 UIview VS UIlayer UI

iOS 动画Animation-4-5: CALayer子类:CATransformLayer

首先说明:这是一系列文章,参考本专题下其他的文章有助于你对本文的理解. 今天周六,希望大家都有一个愉快的周末. 今天来讲解一下CATransformLayer:CATransformLayer是一个专门用来创建三维视图的一个layer,也可以说是多个layer的集合.他没有多余的API,可以这么说,他只是承载了子layer. 下面就看一个例子,通过例子来讲解. 国际惯例先上图: 图就是这样的纯手工打造. 先创建一个CATransformLayer对象: var transformLayer =

iOS动画浅汇(转)

转自:http://www.cocoachina.com/ios/20160311/15660.html 在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的.我们总是追求更为酷炫的实现,如果足够仔细,我们不难发现一个好的动画通过步骤分解后本质上不过是一个个简单的动画实现.本文就个人搜集的一些动画相关的理论和实践知识做个小结,不足之处请勿见怪. 理论 UIview VS UIlayer UI

iOS 动画初步

iOS 动画初步 1. CALayer的使用 (图层) 属于QuartzCore.framework 框架 跨平台 我们在开发中使用的UIKit.framework里面的控件之所以可以看见,主要是由于他拥有了CALayer. 1 //------------------------------------------------------------------------- 2 // 图层 部分属性 3 4 // shadow 是否透明 5 self.myView.layer.shadowO

IOS动画总结

IOS动画总结 http://blog.sina.com.cn/s/blog_611b9d9d01015dkm.html (2012-06-01 14:50:32) 转载▼ 标签: 杂谈 分类: IOS 一.基本方式:使用UIView类的UIViewAnimation扩展 + (void)beginAnimations:(NSString *)animationID context:(void *)context; // 开始准备动画+ (void)commitAnimations; // 运行