这篇文章给大家聊聊关于OC开发中的动画技术解析,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
kCAFillModeBoth 这实际上是上面两者的综合。动画添加后、开始前,图层处于动画的初始状态。动画结束后,图层保持动画的最终状态。 CA属性动画
CAAnimation的子类也是一个抽象类。如果要创建动画对象,应该使用它的两个子类:CABasicAnimation 和CAKeyframeAnimation。
属性分析:
关键路径:
通过指定CALayer的一个属性名称为keyPath(NSString类型),修改CALayer的这个属性的值,就可以实现相应的动画效果。例如指定@“position”为keyPath,将会修改CALayer的position属性值,从而实现平移动画效果。
CA基本动画
CAPropertyAnimation 的子类。
属性解析:
fromValue:keyPath对应属性的初始值。
toValue:keyPath对应属性的结束值。
随着动画的进行,keyPath对应属性的值在duration时间内逐渐从fromValue变为toValue。
如果fillMode=kCAFillModeForwards且removedOnComletion=NO,则动画执行后,图层将保持动画执行后的状态。但本质上,图层的属性值仍然是动画执行前的初始值,并没有真正发生改变。例如,CALayer的初始位置值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为(100,100)。虽然动画执行后图层仍然保持在(100,100)的位置,但本质上图层位置仍然是(0,0)
?
//平移动画
CABasicAnimation *anim=[CABasicAnimationanimationWithKeyPath:@
"位置"
];
//动画持续1秒
动画持续时间=1;
//因为CGPoint是一个结构体,所以用NSValue封装成一个OC对象
anim.fromValue=[NSValue valueWithCGPoint:CGPointMake(50, 50)];
anim.toValue=[NSValue valueWithCGPoint:CGPointMake(100, 100)];
//可以通过MyAnim检索对应的动画对象,例如用于中途取消动画
[图层addAnimation:anim forKey:@
“我的动画”
];
//缩放动画
CABasicAnimation *anim=[CABasicAnimationanimationWithKeyPath:@
"转换"
];
//如果没有设置fromValue,则使用当前状态作为初始值。
//宽度(width)变成原来的2倍,高度(height)变成原来的1.5倍
anim.toValue=[NSValuevalueWithCATransform3D:CATransform3DMakeScale(2, 1.5, 1)];
动画持续时间=1;
[layer addAnimation:anim forKey:nil];
//旋转动画
CABasicAnimation *anim=[CABasicAnimationanimationWithKeyPath:@
"转换"
];
//这里以向量(1, 1, 0)为轴,旋转/2弧度(90)
//如果只是在手机平面上旋转,则设置向量为(0, 0, 1),即Z轴
anim.toValue=[NSValuevalueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 1, 1, 0)];
动画持续时间=1;
[layer addAnimation:anim forKey:nil];
CA关键帧动画
CApropertyAnimation和CABasicAnimation的子类之间的区别是:
CABasicAnimation 只能从一个值(fromValue)更改为另一个值(toValue),而CAKeyframeAnimation 将使用NSArray 来保存这些值。
属性分析:
value:就是上面提到的NSArray对象。里面的元素称为“关键帧”。动画对象会在指定的时间(duration)内依次显示values数组中的每个关键帧。
path:可以设置一个CGPathRefCGMutablePathRef让图层沿着路径移动。 path 仅适用于CALayer 的锚点和位置。如果设置路径,值将被忽略。
keyTimes:可以指定对应关键帧对应的时间点。其取值范围是0到1.0。 keyTimes 中的每个时间值对应于value 中的每个帧。当没有设置keyTimes时,每个关键帧Time的值均分。
CABasicAnimation 可以被视为具有最多2 个关键帧的CAKeyframeAnimation
关键帧动画中还有一个非常重要的参数,就是calculationMode。主要针对每一帧内容为一个坐标点的情况,即anchorPoint和position的动画。当在平面坐标系中有多个离散点时,它们可以是离散的,可以是用直线连接然后插值,也可以是用平滑曲线连接然后插值。 CalculationMode 目前提供以下模式:
kCAAnimationLinear计算模式默认值表示当关键帧为坐标点时,关键帧之间直接用直线连接进行插值计算;
kCAAnimationDiscrete是离散的,即不进行插值计算,直接一一显示所有关键帧;
kCAAnimationPaced 使动画均匀地进行,而不是通过keyTimes 来设置或按关键帧均分时间。此时keyTimes和timingFunctions无效;
kCAAnimationCubic 将关键帧为具有平滑曲线的坐标点的关键帧连接起来后进行插值计算。这里的主要目的是让运行轨迹平滑;
kCAAnimationCubicPaced 看这个名字就知道它和kCAAnimationCubic有一定的联系。其实就是在kCAAnimationCubic的基础上让动画均匀运行,即系统时间内移动的距离是一样的。此时keyTimes和timingFunctions也失效了。
CA动画集团
CAAnimation的子类,可以保存一组动画对象。将CAAnimationGroup对象添加到图层后,组中的所有动画对象都可以同时并发运行。
属性分析:
animations:NSArray用来保存一组动画对象。
默认情况下,一组动画对象同时运行,也可以通过设置动画对象的beginTime属性来更改动画的开始时间。
CA转换
CAAnimation的子类,用于过渡动画,可以提供图层移出屏幕和移入屏幕的动画效果。 iOS 的过渡动画效果比Mac OS X 稍差。
UINavigationController通过CATransition实现将控制器的视图推入屏幕的动画效果。
属性解析:
type:动画过渡类型
子类型:动画过渡方向
startProgress:动画起始点(占整体动画的百分比)
endProgress:动画结束点(占整体动画的百分比)
?
/* 过渡效果
fade //交叉淡入淡出过渡(不支持过渡方向) kCATransitionFade
push //新视图推出旧视图kCATransitionPush
moveIn //新视图移动到旧视图之上kCATransitionMoveIn
Reveal //移动旧视图并在kCATransitionReveal下方显示新视图
cube //立方体滚动效果
oglFlip //上、下、左、右翻转效果
uckEffect //收缩效果,比如一块布被吸走(不支持过渡方向)
rippleEffect //水滴效果(不支持过渡方向)
pageCurl //向上翻页效果
pageUnCurl //向下翻页效果
cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关闭效果(不支持过渡方向)
*/
/* 转移方向
kCA从右过渡
kCA从左过渡
kCATransitionFromBottom
kCA从顶部转换
*/
//CATransition的使用
CATransition *anim=[CATransition 动画];
动画类型=@
"立方体"
;
//动画过渡类型
anim.subtype=kCATransitionFromTop;
//动画过渡方向
动画持续时间=1;
//动画持续1s
//Delegate,动画执行完后会调用delegate的animationDidStop:finished:
anim.delegate=self;
UIView动画
UIKit直接将动画集成到UIView类中。当一些内部属性发生变化时,UIView将为这些变化提供动画支持。
执行动画所需的工作由UIView类自动完成,但是当要执行动画时仍然需要通知视图。为此,您需要将更改属性的代码放置在[UIView beginAnimations:nil context:nil] 和[UIView commitAnimations] 之间。
常用方法分析:
+ (void)setAnimationDelegate:(id)委托
设置动画代理对象。当动画开始或结束时,将向代理对象发送一条消息。
+ (void)setAnimationWillStartSelector:(SEL)选择器
当动画即将开始时,执行委托对象的选择器,并将beginAnimations:context:中传入的参数传入选择器中。
+ (void)setAnimationDidStopSelector:(SEL)选择器
当动画结束时,执行委托对象的选择器,并将beginAnimations:context:中传入的参数传入选择器中。
?
//表示需要执行动画
[UIView beginAnimations:nil context:nil];
//设置动画时长
[UIView setAnimationDuration:1];
//设置过渡动画
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
//交换子视图的位置
[self.view交换SubviewAtIndex:0与SubviewAtIndex:1];
//提交动画
[UIView提交动画];
UIView动画
?
(
空白
)setAnimationDuration:(NSTimeInterval)duration//动画持续时间,单位秒
(
空白
)setAnimationDelay:(NSTimeInterval)delay//delay秒后开始动画
(
空白
)setAnimationStartDate:(NSDate *)startDate//动画开始时间,默认为now
(
空白
)setAnimationCurve:(UIViewAnimationCurve)curve//动画节奏控制,具体见下面“备注”
(
空白
)setAnimationRepeatCount:(
漂浮
)repeatCount//动画重复次数
(
空白
)setAnimationRepeatAutoreverses:(
布尔值
)repeatAutoreverses//如果设置为YES,则表示每次重复执行动画的效果都会与上次相反
(
空白
)setAnimationTransition:(UIViewAnimationTransition)transitionforView:(UIView *)视图缓存:(
布尔值
)cache//设置视图的过渡效果,transition指定过渡类型,缓存设置YES表示使用视图缓存,性能更好
文章分享结束,OC开发中的动画技术解析和的答案你都知道了吗?欢迎再次光临本站哦!
【OC开发中的动画技术解析】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我一直以为OC开发里只有视图层的设计,原来还有动画可以玩!
有7位网友表示赞同!
想学习一下OC开发,看看这些动画到底怎么做到的。
有14位网友表示赞同!
这个标题好吸引人啊!感觉能学到很多实用技巧
有20位网友表示赞同!
最近想要自己做一个app,现在听起来好像要把动画部分也考虑进去。
有12位网友表示赞同!
OC开发的动画效果确实都很酷炫,一直想去深入了解一下设计思路。
有14位网友表示赞同!
有谁知道有没有一些好的教程可以学习OC动画吗?
有14位网友表示赞同!
动画对于提高app的用户体验很重要吧!
有18位网友表示赞同!
不知道哪个OC动画最受欢迎啊?可以分享一下你们的经验吗?
有12位网友表示赞同!
看了这个标题,感觉又打开了新世界的大门!
有16位网友表示赞同!
OC开发的动画和设计有什么联系?有没有人可以讲讲。
有19位网友表示赞同!
学习一个东西总是要从基础开始吧!这个标题正好开了一个好头。
有16位网友表示赞同!
终于知道怎么让我的App更酷炫了!
有19位网友表示赞同!
OC开发里还有什么其他的技巧呢?我很想了解更多。
有6位网友表示赞同!
动画做得好的手机应用感觉就太棒了!
有6位网友表示赞同!
这个标题让我产生了很大的兴趣,我要去学习学习。
有19位网友表示赞同!
现在App市场的竞争越来越大了,动画说不定能成为我的优势!
有20位网友表示赞同!
希望可以学到一些开发动画的技巧,做出自己满意的App!
有20位网友表示赞同!
我比较好奇OC开发的动画成本怎么样?是不是很难实现?
有16位网友表示赞同!