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

标签 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 的代码等。我需要吗使相同的两个属性(百分比,barColor)也暴露在 PatternView 中,以便 ViewController 可以访问它们?那么访问如何与层通信?如果我尝试访问自定义属性之一,如百分比,我不能,因为 PatternView 中的 self.layer 是一个通用的 CALayer*。它确实指向一个 PatternLayer,但我似乎无法通过转换来告诉它。

本质上,我看了所有讨论如何编写层代码的教科书,drawInContext、initWithLayer、needsDisplayForKey、actionForKey等,但我不知道如何在更高层次上触发这些功能,例如传入层的百分比和 barColor 值,循环 shineProgress 等。如何让永恒动画运行?如何将参数从 View 传递到图层?对此的任何指导将不胜感激。我真的不想像许多 Web 示例那样添加子层 --- 只使用附加到我的 View 的一层。

谢谢!

感谢您的帮助。

最佳答案

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

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

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

关于iphone - 在哪里放置调节 CALayer 动画的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314355/

相关文章:

ios - 在 iOS 设备中存储图像和文件

iphone - 添加带动画的 subview

ios - dyld : Library not loaded: @rpath/libswiftSwiftOnoneSupport. 动态库

ios - 通用项目中的动画和框架、边界处理问题

iOS Safari,在独立模式下运行我们的网络应用程序时,iOS 在后台崩溃

iphone - iOS 中如何检测铃声开关状态?

iOS:删除的代码继续影响应用程序

ios - 如何在 UITableView 中将文件夹的文件夹显示为列表 - Swift

ios - 滚动时扭曲 UITableViewCell?

macos - CALayer调用NSView