如何为手动“动画”重新排队对 UIView drawRect 的请求

Posted

技术标签:

【中文标题】如何为手动“动画”重新排队对 UIView drawRect 的请求【英文标题】:How to requeue request for UIView drawRect for manual "Animations" 【发布时间】:2010-11-02 00:41:49 【问题描述】:

我正在尝试在UIview 中做一些手动“动画”。

我将“动画”放在引号中,因为我试图为我控制的任意元素的移动和显示设置动画 - 而不是通常通过 UIView 动画块完成的清晰简洁的移动。 (想想让一个人走路 - 因为我正在绘制不同的图像和不同的地方作为一系列“框架”。)

这在 Cocos2d 中很简单,使用“nextFrame”——不断重新排队。

我想我可以在 drawRect 和 drawRect 末尾的 setNeedsDisplay 中进行绘图,这将使框架立即发送另一个 drawRect 事件 - 但这似乎不起作用。

我可以在固定的时间间隔为setNeedsDisplay 设置一个NSTimer 事件,但这不允许我以最大可能的帧速率进行绘制。

我也试过用 layoutSubviews 来做这件事,在layoutSubviews 的末尾调用 setNeedsLayout - 但我永远都做不到

那么 - 我该怎么做呢?

【问题讨论】:

为什么 nstimer 不给你最大帧率? 你的意思是如果我只是请求一个一次性计时器事件来立即触发?没想到…… 【参考方案1】:

如前所述,我使用 NSTimer 以最大帧速率触发更新请求。

【讨论】:

以上是关于如何为手动“动画”重新排队对 UIView drawRect 的请求的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIView 关键帧动画设置动画曲线(`func UIView.animateKeyframes()`)

我将如何为bringSubviewToFront 编写 UIView 淡入动画

如何为 UIView 动画设置相同的速度

如何为具有约束的 UIView 设置动画?

当UIVIew隐藏在sameView中时,如何为UIview设置动画

如何为 CALayer 使用基于块的动画?