0

我设法在我的自定义层 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 等的了解,我的用户交互代码进入了视图控制器,但是我不确定如何构建动画,将循环shineProgress 的代码放在哪里等等。我需要使相同的两个属性(百分比,barColor)也暴露在 PatternView 中,以便 ViewController 可以访问它们?那么这些访问是如何传递给层的呢?如果我尝试访问百分比等自定义属性之一,则无法访问,因为 PatternView 中的 self.layer 是通用的 CALayer*。

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

谢谢!

谢谢你的帮助。

4

1 回答 1

2

这不是一个确切的答案,但我会发布它,因为没有其他人回答。我相信你可以通过阅读Github 上类似控件的代码来学习如何做到这一点。

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

希望这将帮助您走上正轨。

于 2013-10-11T14:40:48.667 回答