
要调用图形,我使用CVdisplaylink,在下面的代码中概述:
- (voID)windowControllerDIDLoadNib:(NSWindowController *) aController { //other stuff... [self preparedisplaylink]; //For some reason putting this in awakeFromNib crashes}//Prep the display link.- (voID)preparedisplaylink { CVdisplaylinkCreateWithActiveCGdisplays(&displaylink); CVdisplaylinkSetCurrentCGdisplay(displaylink,((CGDirectdisplayID)[[[[[self windowForSheet]screen]deviceDescription]objectForKey:@"NSScreenNumber"]intValue])); CVdisplaylinkSetoutputCallback(displaylink,&MydisplaylinkCallback,self);}//Callback to draw framestatic CVReturn MydisplaylinkCallback(CVdisplaylinkRef displaylink,const CVTimeStamP* Now,const CVTimeStamP* outputTime,CVOptionFlags flagsIn,CVOptionFlags* flagsOut,voID* displaylinkContext){ NSautoreleasePool *pool =[[NSautoreleasePool alloc]init]; CVReturn result = [(ScrollVIEw*)displaylinkContext getFrameForTime:outputTime]; [pool drain]; return result;}//Drawing function:- (CVReturn)getFrameForTime:(const CVTimeStamP*)outputTime{ [scrollVIEw lockFocusIfCanDraw]; [self addToCurrentPostion:(dist/time)*CVdisplaylinkGetActualOutputVIDeoRefreshPeriod(displaylink)]; //Redraws the scrollvIEw]; [scrollVIEw unlockFocus]; return kCVReturnSuccess;}//Set the display when the window moves:- (voID)windowDIDMove:(NSNotification *)notification { if ([notification object] == [self windowForSheet]) { CVdisplaylinkSetCurrentCGdisplay(displaylink,((CGDirectdisplayID)[[[[[self windowForSheet]screen]deviceDescription]objectForKey:@"NSScreenNumber"]intValue])); }}//Start or stop the animation:- (IBAction)toggleAnim:(ID)sender { if (CVdisplaylinkIsRunning(displaylink)) { CVdisplaylinkStop(displaylink); } else { CVdisplaylinkStart(displaylink); }} 呈现代码:
- (voID)addToCurrentPostion:(float)amnt { fCurrentposition += amnt; //fCurrentPositon is a float ivar if (scrollVIEw) [[scrollVIEw contentVIEw]scrolltopoint:NSMakePoint(0,(int)fCurrentposition)]; if (scrollVIEw) [scrollVIEw reflectScrolledClipVIEw:[scrollVIEw contentVIEw]];} 这工作伟大,动画是黄油…..在一个屏幕上。
一旦我将一个文档从主屏幕上移开,放到第二个显示器上,动画变得像带有方形轮子的汽车一样光滑。
当第二个屏幕上有任何一个(或多个)文档时,所有文档中的动画变得很差。
主屏幕和次屏幕上都没有文档,动画也会降级。
我试过这个在多种类型的显示器和多个Mac,总是结束这些结果。
为了确保这不是一个CVdisplaylink相关的问题,我也尝试使用NSTimer(CVdisplaylink是首选)渲染,具有相同的结果。
我究竟做错了什么?
任何帮助是极大的赞赏。
编辑:我已经尝试使用基于线程的绘图太,再次有相同的结果。
编辑:我已经取得了一些进展,因为我的线程绘图(基本上是一个while循环)在一个屏幕上工作得很好。 (第二或第一)。
解决方法 每次文档进入新屏幕时,是否尝试调用preparedisplaylink?可能做的工作。你可以从windowDIDMove函数检测到。 总结以上是内存溢出为你收集整理的在不同的屏幕上的Cocoa绘图失去性能全部内容,希望文章能够帮你解决在不同的屏幕上的Cocoa绘图失去性能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)