【问题标题】:iphone - Where to put code regulating CALayer animation?iphone - 在哪里放置代码调节 CALayer 动画?
【发布时间】:2013-10-11 09:08:34
【问题描述】:

我已经设法在我的自定义层 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 的代码放在哪里等等。我需要使相同的两个属性(百分比,barColor)也暴露在 PatternView 中,以便 ViewController 可以访问它们?那么这些访问是如何传递给层的呢?如果我尝试访问百分比等自定义属性之一,则无法访问,因为 PatternView 中的 self.layer 是通用的 CALayer*。它确实指向 PatternLayer,但我似乎无法通过投射来告诉它。

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

谢谢!

感谢您的帮助。

【问题讨论】:

  • 我目前正在使用 PatternView 中的代码进行测试。我遇到的一个问题是同时在栏上设置颜色和百分比的动画。颜色总是跳跃,因为它取决于百分比。因此,即使我添加了一个彩色动画,但它确实会为整个动画呈现一种颜色,因为在条形图开始移动之前或在条形图完成动画之后会有一个突然的跳跃。

标签: iphone ios core-animation layer


【解决方案1】:

这不是一个确切的答案,但我会发布它,因为没有其他人回答。我相信你可以通过阅读the code of a similar control on Github来学习如何做到这一点。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多