0

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

4

1 回答 1

1

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

我最初的想法是为每个单独的球创建一个视图,具有随机的大小和位置。但是 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。

于 2012-01-21T20:52:07.367 回答