我设法在我的自定义层 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 示例那样添加子层 --- 只需使用附加到我的视图的一层。
谢谢!
谢谢你的帮助。