我正在尝试实现一个自定义视图,它可视化实时变化的值(例如音频输出的音量),为了实现这一点,我想让drawRect执行每个动画帧来渲染值的正确视图状态。
我能想到的唯一解决方案是将计时器设置为每秒执行60次,并调用view.setNeedsDisplay()
,但我确信这不是获得此行为并保证平稳性能的最佳方法。 / p>
编辑以提供略微更具体的示例
所以我的情况基本上是这样的:
//There is a variable which is changing continuously
var dynamicFoo : Double!
//I want to create a view class which renders foo in real-time
class fooVisualizerView : UIView {
//I have drawing code which renders foo at any given value
override func drawRect(rect: CGRect) {
valueDependantDrawFunction(dynamicFoo)
}
}
理想情况下,我希望fooVisualizerView
重绘每个动画帧。
答案 0 :(得分:2)
[viewA addGestureRecognizer: viewAGestureRecognizer];
听起来像你想要的 - 这实际上是每次更新屏幕时调用的计时器。您可以从显示链接方法中调用CADisplayLink
。
请注意,您的代码需要在1/60秒内完成此方法,否则它看起来很糟糕。