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

标签 objective-c cocoa drawing

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

相关文章:

xcode - 模拟复制/粘贴的应用程序在沙盒化后将无法工作。如何让它发挥作用?

cocoa - iOS 6 中的 UILabel/NSAttributedString 中的连字不起作用

ios - 如何使用 Core Text 向后布局文本?

java - 自定义 Circlular seek arc 以将位图放置在给定的进度级别

java - 为什么setBackground会覆盖其他绘图?

objective-c - UITextField 绑定(bind)

iphone - CABasicAnimation 键

c - 我怎样才能将 SpaceManager cpShape 存储在类似数组的东西中?

ios - 如何从数组中获取值并将其存储为坐标

objective-c - 进度指示器旋转轮如何操作