我有一个 NSBox
,在其中我使用 NSRectFill()
绘制小矩形。我的代码如下所示:
for (int i = 0; i <= 100; i++){
int x = (rand() % 640) + 20;
int y = (rand() % 315) + 196;
array[i] = NSMakeRect(x, y, 4, 4);
NSRectFill(array[i]);
}
这个 for 循环在网格内创建 100 个随机放置的矩形。我一直在尝试做的是创建一种动画,由反复运行的代码创建,使用以下代码创建随机出现的矩形的动画:
for (int i = 0; i <= 10; i++) {
[self performSelector:@selector(executeFrame) withObject:nil afterDelay:(.05*i)];
}
顺便说一句,第一个 for 循环是 executeFrame
函数中唯一的东西。所以,我需要做的是删除帧之间的所有矩形,使它们的数量保持不变,并且看起来像是在移动。我尝试通过在调用 executeFrame
之前调用 [myNsBox display];
再次绘制背景来实现此目的,但这使得看起来好像没有绘制任何矩形。之后调用它做了同样的事情,所以切换到 setNeedsDisplay 而不是显示。我无法弄清楚这一点,任何帮助将不胜感激。
顺便说一下,另一件事是,当我尝试运行代码来执行帧时,而不尝试删除之间的矩形,所发生的只是绘制了 100 个以上的矩形。即使我要求抽1000,或者10,000。但是,如果我离开窗口并返回到它(立即,时间不是这里的因素),页面就会更新并且矩形就在那里。我试图通过使用 [box setNeedsDisplayInRect:array[i]];
来克服这个问题,它以一种奇怪的方式工作,导致它更新每一帧,但删除了矩形的部分。对此的任何帮助也将不胜感激。
最佳答案
听起来你是在drawRect:之外绘图。如果是这种情况,请将绘图代码移至 View (框或某些 subview )的drawRect: 方法中。否则,您的绘图将被 Cocoa 绘图系统破坏,就像您所看到的那样。您还需要使用计时器或动画而不是循环来进行重复绘图。
关于objective-c - 删除由 NSRectFill 完成的 cocoa 绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553460/