iphone - 使用 CGRect 和 setNeedsDisplay

标签 iphone ios ipad uiview cgrect

如何重写 UIView 的 drawRect 方法,以便每次调用 [myView setNeedsDisplay] 时,它都会以随机颜色在屏幕上绘制一个新的随机圆圈。它不应该取代旧的圆圈。因此,它应该看起来像一堆圆圈一个接一个地堆积在屏幕上。

最佳答案

您不能使用drawRect:这样。它旨在绘制该矩形内的整个 View ,因此您必须一次绘制所有球,而不仅仅是您要添加的球。每次调用drawRect时,您正在绘制的屏幕区域都已经被删除了之前的状态。

我最初的想法是为每个单独的球创建一个 View ,具有随机的大小和位置。但 SonOfSillyBalls 示例代码(它正是您想要做的事情)采用了不同的方法。

这是NSView子类设置一个重复计时器来触发 drawAnother:方法,它的作用是 [self lockFocus] ,然后随机抽取一个球,然后[self unlockFocus]完成绘图。最后,它调用 [self.window flushWindow]将新球显示到屏幕上。

由于它完全完成了您想要做的事情,也许您不应该阅读它(其中的挑战在哪里!),但是 SonOfSillyBalls 的示例代码在这里:http://developer.apple.com/library/mac/#samplecode/SonOfSillyBalls/

您可能想查看自述文件,以了解整个问题的解释以及为什么它不适合现代绘图 API(注意:它很旧,因此在某些地方它将 Mac OS X 称为“Open Step”)和“Rhapsody”(“X”名称尚未发明)和 Classic Mac OS 就像“Mac OS”)

Silly Balls 是 Apple 最古老的示例代码之一,最初来自 1980 年代,但这是第三次(我认为?)修订版,仅在六个月前更新以使用 Objective-C 2.0。

关于iphone - 使用 CGRect 和 setNeedsDisplay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8956307/

相关文章:

iphone - 将NSArray的随机对象放置到NSArray的随机UIButtons标题中

ios - 如何连接到 UIContainerView

iphone - 在 iOS (iPad) 上使用 3D 变换

iphone - 如何修复 iOS 7 上的 UITableView 分隔符?

iphone - KVO 意外崩溃

iOS 使用推特登录

ios - 检测到信标时打开新 View

iphone - 即使 userInteractionEnabled 设置为 NO,UITextField 也会显示光标

iphone - iAd 无法在我的 iPhone 应用程序中运行

ios - UIView transform.scaleBy 动画不工作