Cocoa 如何在不从方法返回的情况下刷新核心图?
我有一个cocoa界面,它使用core plot。当我按下界面上的一个按钮时,就会画出一个图。我想通过多次调用plotting方法以及其间对sleep()的调用来创建一系列图形。但看起来,即使调用了重载数据,在函数退出之前什么也不会发生(也只显示最后一个图形)。现在我知道CPAnimation是存在的,但在我开始使用它之前,我想知道当函数退出时会发生什么,从而使图形刷新。我是否必须向负责刷新而不是使用睡眠的线程让步?核心绘图(或您的代码)可能会将视图设置为需要显示。这不会马上发生;当您返回到事件循环时会发生这种情况 每当你在Mac OS X应用程序中使用Cocoa 如何在不从方法返回的情况下刷新核心图?,cocoa,xcode,quartz-graphics,core-plot,Cocoa,Xcode,Quartz Graphics,Core Plot,我有一个cocoa界面,它使用core plot。当我按下界面上的一个按钮时,就会画出一个图。我想通过多次调用plotting方法以及其间对sleep()的调用来创建一系列图形。但看起来,即使调用了重载数据,在函数退出之前什么也不会发生(也只显示最后一个图形)。现在我知道CPAnimation是存在的,但在我开始使用它之前,我想知道当函数退出时会发生什么,从而使图形刷新。我是否必须向负责刷新而不是使用睡眠的线程让步?核心绘图(或您的代码)可能会将视图设置为需要显示。这不会马上发生;当您返回到事件
sleep
,你就会杀死一只小狗。改用NSTimer。让计时器回调方法完成一个图所需的工作,并设置方法所需的任何实例变量,以便该方法知道应该绘制哪个图,以便该方法依次绘制每个图,直到用完为止
或者,更好的是,提供一个用户可以选择的图表列表,而不是让用户以幻灯片形式观看所有图表。(除非您正在实施的是明确标记的幻灯片放映。)Peter说得对,重载数据方法实际上不会绘制任何内容。绘图被标记为需要显示,并在下次将图层绘制到屏幕时刷新。如果你使用
睡眠
,它就永远没有机会画画
还要注意,核心地块是一个相当年轻的项目
CPAnimation
和相关类是存根。他们还没有真正做任何事情。:-) 好吧,我知道怎么做了。我从一个单独线程(总是返回)中的方法调用了reloadData方法。这可以归结为从iAction调用reloadData,也可以使用NSTimer调用。最后,我将使用NSConditionLock代替sleep来协调处理和刷新,核心图与大多数Cocoa绘图框架一样,是惰性的:它在运行循环迭代结束时绘制。这是为了确保不会太频繁地绘制对象
图层标记为需要绘制,而不是立即绘制
正如其他人所指出的,更好的睡眠方法是使用NSTimer来避免阻塞运行循环,或者使用NSObject方法,如performSelector:withObject:afterDelay:添加了core plot标记(如您在另一个问题中所要求的)。同样,core plot framework的贡献者很少在堆栈溢出时处于活动状态。对于项目邮件列表中的问题,您可能会得到更好的回复:哦,感谢您的回复,同时我还提供了一点自定义代码的动画,它的速度足以满足我现在的需要。