iphone - 在哪里放置调节CALayer动画的代码?

时间:2013-10-11 09:08:35

标签: iphone ios core-animation layer

我已经设法在我的自定义图层PatternLayer的drawInContext方法中绘制一个条形图。但是,我想动画三件事,并对我可以放置自定义动画规则代码的位置感到困惑。这是我的自定义图层的界面:

@interface PatternLayer : CALayer

@property (nonatomic) CGFloat percentage;
@property (nonatomic) CGFloat shineProgress;
@property (nonatomic, strong) UIColor* barColor;

@property (nonatomic) CGFloat strokeWidth;
@property (nonatomic, strong) UIColor* strokeColor;

简而言之,drawInContext函数使用百分比来计算要填充多少条的剪切点,barColor用作填充颜色,shineProgress是沿着条形放置高光的位置,用于渐变目的。

在动画的一部分中,Action触发ViewController更新百分比和barColor。

在第二个动画中,shineProgress不断循环从0到1.0到0到1.0 ......无限无限,无止境。

我一直在阅读的所有示例都声明了CABasicAnimation或CAKeypointAnimation,但没有人指定放置该对象的位置。我有一个带有一个PatternView的ViewController,而PatternView有一个图层PatternLayer。根据我对UIActions的了解等等,我的用户交互代码进入View Controller,但后来我不知道如何构建一个动画,在哪里放置循环shineProgress的代码,等等。我需要吗?使PatternView中公开的两个属性(百分比,barColor)相同,以便ViewController可以访问它们?然后如何将访问传递给图层?如果我尝试访问其中一个自定义属性,如百分比,我不能,因为PatternView中的self.layer是一个通用的CALayer *。它确实指向了PatternLayer,但我似乎无法通过强制转换告诉它。

本质上,我阅读了所有这些讨论如何编写图层代码,drawInContext,initWithLayer,needsDisplayForKey,actionForKey等的教科书,但我不知道如何在更高级别触发这些函数,例如传入百分比& barColor值到图层,循环shineProgress等。如何让永恒动画运行?如何从视图中将参数传递给图层?任何有关这方面的指导都将非常感激。我真的不想像很多网页示例那样添加子图层 - 只需使用附加到我视图的一层。

谢谢!

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这不是一个确切的答案,但我会发布它,因为没有其他人回答。我确信您只需阅读the code of a similar control on Github即可了解如何操作。

基本上,drawInContext:不会为任何内容制作动画,它只知道如何根据图层属性的当前值绘制图层。 CABasicAnimation更改图层属性的值(根据其属性fromValuetoValue),然后调用drawInContext:。它做了很多次(它基于durationtimingFunction),这会产生动画的错觉。

希望这会帮助你走上正确的轨道。