gpt4 book ai didi

objective-c - 删除由 NSRectFill 完成的 cocoa 绘图?

转载 作者:行者123 更新时间:2023-12-03 16:38:43 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com