自定义CALayer动画
来源:互联网 发布:北方工业公司 知乎 编辑:程序博客网 时间:2024/05/16 19:46
当我们需要区实现一个layer的时候,并且需要为其添加一个属性动画的时候,我们需要有这么几步操作:
首先,我们需要去继承一个CALayer类,同时实现以下的几个方法:
+ (BOOL)needsDisplayForKey:(NSString *)key
方法来判断当前属性改变是否需要重新绘制。如果想实现自定义动画就需要重载这个方法,当key等于扩展属性时return yes即可;
这句话什么意思?这里在layer中有这么一个方法 - (void)drawInContext:(CGContextRef)ctx ,这个方法就类似于我们去写一个自定义的View,而在View中需要重写drawRect方法一样,用来实现绘图。而以上方法也正是调用这个方法去绘图。
我们先来创建一个CircleLayer类:
#import <QuartzCore/QuartzCore.h>
#import <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIKit.h>
@interface CircleLayer :CALayer
@property(nonatomic ,assign)CGFloat progress;
@end
在.m中重载一下这两个方法:
- (void)drawInContext:(CGContextRef)ctx
{
NSLog(@"%s",__FUNCTION__);
CGContextSetLineWidth(ctx,5.f);
CGContextSetStrokeColorWithColor(ctx, [UIColorblackColor].CGColor);
CGContextAddArc(ctx,CGRectGetWidth(self.bounds)/2.,CGRectGetHeight(self.bounds)/2.,CGRectGetWidth(self.bounds)/2.- 6, M_PI_2 * 3,M_PI_2*3+M_PI*2*self.progress,0);
CGContextStrokePath(ctx);
}
+ (BOOL)needsDisplayForKey:(NSString *)key{
NSLog(@"__%s__ %@",__FUNCTION__,key);
return [keyisEqualToString:@"progress"]?YES:[superneedsDisplayForKey:key];
}
稍微说明下:drawInContext 绘制一个圆圈,根据progress绘制出实际的弧度,progress正是我们的自定义属性。needsDisplayForKey 自然是让progress自动调用setNeedsDisplay。需要注意的是,我们也可以直接去调用setNeedsDisplay去令其直接画图。
定义好我们的自定义layer后,只要为其添加动画即可:
CABasicAnimation* animat = [CABasicAnimationanimationWithKeyPath:@"progress"];
animat.duration =6.f;
animat.fromValue = [NSNumbernumberWithFloat:[(CircleLayer*)[layerpresentationLayer]progress]];
animat.toValue = [NSNumbernumberWithFloat:1.0f];
animat.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[layeraddAnimation:animatforKey:@"gogogo"];
以上便是实现动画的核心内容,具体详细的内容可以研究下一下帖子:
http://blog.csdn.net/growinggiant/article/details/42493329
http://www.jianshu.com/p/78e1b416e56a
- 自定义CALayer动画
- CALayer扩展属性自定义CAAnimation动画
- iOS核心动画之CALayer-自定义层
- CALayer中自定义属性的动画
- iOS 给CALayer自定义属性的动画
- CALayer,动画
- CALayer,动画
- 动画 CALayer
- CALayer,动画
- CALayer动画
- CALayer动画
- CALayer自定义
- 动画—CALayer的初步学习四:CALayer绘图—使用自定义图层绘图
- 【动画2】CALayer动画
- Core Animation动画学习2——自定义CALayer的动画
- 【iOS】自定义CALayer可能会出现没有动画过程但有动画结果的解析
- CALayer层和动画
- CALayer的动画创建
- AE获取图层中所有要素
- 冒泡排序法和二分法排序
- 利用TCPDF将html页面转换为PDF格式
- (转)分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令
- php基础
- 自定义CALayer动画
- linux 修改ssh端口号
- 软件架构初识(发展历程)
- 大小写字母的转换
- python基础与基本数据类型
- netty使用入门
- Unity3D学习之路
- Qt error Link 2019无法解析外部符号
- MODBUS CRC校验原理及C语言实现