如何覆盖UIView的drawRect方法,这样每次调用[myView setNeedsDisplay]时,它都会在屏幕上以随机颜色绘制一个新的随机圆圈。它不应该取代旧圈子。所以,它应该看起来就像一堆圈子在屏幕上堆叠起来,一个接一个。
答案 0 :(得分:1)
您不能以这种方式使用drawRect:
。它被设计用于在该矩形内绘制整个视图,因此您必须立即绘制所有球,而不仅仅是您要添加的球。每次调用drawRect时,您正在绘制的屏幕区域已经擦除了之前的状态。
我最初的想法是为每个球创建一个视图,具有随机的大小和位置。但SonOfSillyBalls示例代码(完全按照您要做的那样)采用了不同的方法。
NSView
子类设置一个重复计时器来触发drawAnother:
方法,[self lockFocus]
方法,然后绘制一个随机球,然后[self unlockFocus]
完成绘图。最后,它调用[self.window flushWindow]
将新球放到屏幕上。
因为完全你正在尝试做什么,也许你不应该阅读它(那里的挑战在哪里!),但是SonOfSillyBalls的示例代码在这里:{{3 }}
您可能需要查看阅读本文以获取有关整体问题的解释以及为什么它不适合现代绘图API(注意:它已经过时了,因此在某些地方它将Mac OS X称为“Open Step”和“Rhapsody”(“X”名称尚未发明)和经典Mac OS就像“Mac OS”一样)
Silly Balls是Apple最古老的示例代码之一,最初发布于20世纪80年代,但这是第三次(我认为?)修订版,仅在六个月前更新为使用Objective-C 2.0。