【发布时间】:2011-02-06 00:18:46
【问题描述】:
提前致谢。
我有一个 Quartz Composer 视图(下面的 qcView),并在随机方向上移动一个图像(蚂蚁的,如果你想知道代码的话),直到它在 QCView 中间找到它的“家”。 pauseRendering 是必要的,这样我们才能看到蚂蚁一寸一寸地移动;没有它,蚂蚁只会出现在它的“家”。
while([self distance] > acceptableOffset){
[qcView pauseRendering];
[self moveTowardsDestination:@"home"];
[qcView resumeRendering];
}
这对于单个蚂蚁来说非常有效。
当我在等式中添加另一个蚂蚁时,我使用了一个调度队列和两个块。
dispatch_async(queue, ^{
[theAnt findCenter];
});
dispatch_async(queue, ^{
[otherAnt findCenter];
});
运行此代码时,两个阿姨会同时匆匆忙忙赶回他们家——这正是我们正在寻找的行为。但是,当我停止执行并再次构建时,我会立即从 [qcView pauseRendering] 方法中的某处获得 Exc_Bad_Access。在 Clean & Build 之后,它将完美地运行一次。 移除 pauseRendering 和 resumeRendering 后,蚂蚁会立即出现在它们的家中。
显然 QCView pauseRendering 方法有一个本地数组,该数组不断增长和缩小,通过单个 QCView 和多个块访问它,您可以看到问题的根源。
我研究了QCView documentation,但似乎找不到那里的灵感; pauseRendering 的文档很少。虽然我敢肯定你们中没有人尝试过像这样愚蠢的事情,但我希望有人有实际修改 QCView 的经验,并且能够指出我正确的方向(错误......阅读“任何!”)方向.
[编辑:我尝试了“while (![qcView isPausedRendering])”的变体,如果有帮助的话。]
【问题讨论】:
标签: objective-c xcode grand-central-dispatch quartz-composer