Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何在不从方法返回的情况下刷新核心图?_Cocoa_Xcode_Quartz Graphics_Core Plot - Fatal编程技术网

Cocoa 如何在不从方法返回的情况下刷新核心图?

Cocoa 如何在不从方法返回的情况下刷新核心图?,cocoa,xcode,quartz-graphics,core-plot,Cocoa,Xcode,Quartz Graphics,Core Plot,我有一个cocoa界面,它使用core plot。当我按下界面上的一个按钮时,就会画出一个图。我想通过多次调用plotting方法以及其间对sleep()的调用来创建一系列图形。但看起来,即使调用了重载数据,在函数退出之前什么也不会发生(也只显示最后一个图形)。现在我知道CPAnimation是存在的,但在我开始使用它之前,我想知道当函数退出时会发生什么,从而使图形刷新。我是否必须向负责刷新而不是使用睡眠的线程让步?核心绘图(或您的代码)可能会将视图设置为需要显示。这不会马上发生;当您返回到事件

我有一个cocoa界面,它使用core plot。当我按下界面上的一个按钮时,就会画出一个图。我想通过多次调用plotting方法以及其间对sleep()的调用来创建一系列图形。但看起来,即使调用了重载数据,在函数退出之前什么也不会发生(也只显示最后一个图形)。现在我知道CPAnimation是存在的,但在我开始使用它之前,我想知道当函数退出时会发生什么,从而使图形刷新。我是否必须向负责刷新而不是使用睡眠的线程让步?

核心绘图(或您的代码)可能会将视图设置为需要显示。这不会马上发生;当您返回到事件循环时会发生这种情况

每当你在Mac OS X应用程序中使用
sleep
,你就会杀死一只小狗。改用NSTimer。让计时器回调方法完成一个图所需的工作,并设置方法所需的任何实例变量,以便该方法知道应该绘制哪个图,以便该方法依次绘制每个图,直到用完为止


或者,更好的是,提供一个用户可以选择的图表列表,而不是让用户以幻灯片形式观看所有图表。(除非您正在实施的是明确标记的幻灯片放映。)

Peter说得对,重载数据方法实际上不会绘制任何内容。绘图被标记为需要显示,并在下次将图层绘制到屏幕时刷新。如果你使用
睡眠
,它就永远没有机会画画


还要注意,核心地块是一个相当年轻的项目
CPAnimation
和相关类是存根。他们还没有真正做任何事情。:-)

好吧,我知道怎么做了。我从一个单独线程(总是返回)中的方法调用了reloadData方法。这可以归结为从iAction调用reloadData,也可以使用NSTimer调用。最后,我将使用NSConditionLock代替sleep来协调处理和刷新,核心图与大多数Cocoa绘图框架一样,是惰性的:它在运行循环迭代结束时绘制。这是为了确保不会太频繁地绘制对象

图层标记为需要绘制,而不是立即绘制


正如其他人所指出的,更好的睡眠方法是使用NSTimer来避免阻塞运行循环,或者使用NSObject方法,如performSelector:withObject:afterDelay:

添加了core plot标记(如您在另一个问题中所要求的)。同样,core plot framework的贡献者很少在堆栈溢出时处于活动状态。对于项目邮件列表中的问题,您可能会得到更好的回复:哦,感谢您的回复,同时我还提供了一点自定义代码的动画,它的速度足以满足我现在的需要。