详解CoreAnimation中如何自定义动画属性
来源:互联网 发布:审批流软件 编辑:程序博客网 时间:2024/06/06 00:31
CoreAnimation中如何自定义动画属性是本文要介绍的内容,CoreAnimation可以对UIView里的CALayer进行动画处理 。它的原理很简单,用户提供一个初始值,终点值和动画持续时间,CoreAnimation自动对 初始值,终点值之间,按照动画持续时间进行插值(生成中间值),生成中间帧,然后在一个单独的线程里进行播放,程序员就不再需要自己去绘制中间帧 。
CoreAnimation在对CALayer进行动画生成时,需要用户指定对CALayer的哪一个属性进行插值,也就是必须声明成@property的变量,使用各个动画的虚拟超类CAPropertyAnimation的animationWithKeyPath方法来指定,例如下面的代码说明要对CALayer的postion属性进行插值 。
- CABasicAnimation *aBasicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
在缺省情况下,能对 CALayer指定的动画属性是固定的,例如bounds,postion,可以在XCode的开发文档里查到,但是有的时候,我们需要对自定义的属性进行动画生成,这个就需要子类化CALayer,重载它的needsDisplayForKey方法
- + (BOOL)needsDisplayForKey:(NSString *)aKey {
- if ([aKey isEqualToString:@"myProperty"]) {
- return (YES);
- } else {
- return ([super needsDisplayForKey:aKey]);
- }
- }
在这里,告诉CoreAnimation,我的CALayer子类有一个 myProperty属性,请对它进行动画插值 。接下来,就可以重载
drawInContext方法,添加自己的关键帧绘画代码了 。
子类化CALayer时,有个地方要注意,因为CoreAnimation在生成中间帧的方式,是通过Copy操作生成了一大堆中间帧用的CALayer,它在复制CALayer的数据时,只能对CALayer原有的属性成员进行copy,不会copy后添加的诸如对象引用一类的东西,这就需要程序员重载
- - (id)initWithLayer:(id)layer
- {
- self = [super initWithLayer:layer];
- if(self != nil) {
- MyLayer *myLayer = (MyLayer*)layer;
- self.aUIImage = cl.aUIImage;
- }
- return (self);
- }
来生动copy一些没法自动copy的资源 。
写些小提示,像 drawInContex之类的绘图方法中,尽量避免CGContextDrawImageInRect之类的元绘图调用,因为这些元绘图操作非常耗时,也是硬件加速帮不上忙的地方,尽量通过将CGImageRef传给CALayer.contents属性的方法把内容事先做好传给CALayer,然后通过仿射或者3D transform的方法来进行动画变换, 因为仿射或者3D transform是完全硬件加速的,它比自己书写绘图代码要快的多的多 。
- 详解CoreAnimation中如何自定义动画属性
- 详解CoreAnimation中如何自定义动画属性
- COREANIMATION中如何自定义动画属性
- COREANIMATION中如何自定义动画属性
- 核心动画 CoreAnimation、CALayer详解
- 核心动画 CoreAnimation 详解 【推荐】
- iOS CoreAnimation动画详解(一)
- 属性动画:如何自定义View
- CoreAnimation动画
- CoreAnimation动画
- ios 动画CoreAnimation中遇到的问题
- Layer中自定义属性的动画
- CALayer中自定义属性的动画
- 属性动画 自定义属性
- CoreAnimation 详解
- CoreAnimation详解
- android视图动画、属性动画、自定义动画、5.X SVG矢量动画机制详解
- CoreAnimation详解(一)有关Layer的动画
- 腾讯微博OAuth web认证
- Handler&Looper
- Qwt源码解读之QwtClipper 类
- HDOJ 1114 Piggy-Bank (多重背包)
- 数据库实验
- 详解CoreAnimation中如何自定义动画属性
- 矩阵快速幂 poj3070 3233 3735 3150
- 动态链接技术
- Linux下Sed命令用法详解
- 哈希表心得---haoel
- 百度之星区域赛第一题——平衡负载题解
- 字符串移动:字符串为*号和26个字母的任意组合把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变
- C# 中的委托和事件
- SQL Server dateFormat