在每一帧上执行 drawRect?
execute drawRect on every frame?
我正在尝试实现一个自定义视图,该视图可视化一个实时变化的值(例如音频输出的音量),为了实现这一点,我想让 drawRect 执行每个动画帧为值呈现正确的视图状态。
我能想到的唯一解决方案是将计时器设置为每秒执行 60 次,然后调用 view.setNeedsDisplay()
,但我确信这不是获得此行为并保证流畅性能的最佳方式.
编辑给出一个稍微更具体的例子
所以我的情况基本是这样的:
//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
在每个动画帧上重绘。
A CADisplayLink
听起来像您想要的 - 这实际上是一个计时器,每次更新屏幕时都会调用它。您可以从显示 link 方法中调用 setNeedsDisplay
。
请注意,您的代码需要在 1/60 秒内完成此方法,否则看起来会很糟糕。
我正在尝试实现一个自定义视图,该视图可视化一个实时变化的值(例如音频输出的音量),为了实现这一点,我想让 drawRect 执行每个动画帧为值呈现正确的视图状态。
我能想到的唯一解决方案是将计时器设置为每秒执行 60 次,然后调用 view.setNeedsDisplay()
,但我确信这不是获得此行为并保证流畅性能的最佳方式.
编辑给出一个稍微更具体的例子
所以我的情况基本是这样的:
//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
在每个动画帧上重绘。
A CADisplayLink
听起来像您想要的 - 这实际上是一个计时器,每次更新屏幕时都会调用它。您可以从显示 link 方法中调用 setNeedsDisplay
。
请注意,您的代码需要在 1/60 秒内完成此方法,否则看起来会很糟糕。