到目前为止,我有一个NSVIEw的子类:
@interface GameVIEw : NSVIEw {@private CVdisplaylinkRef displaylink;}- (CVReturn)getFrameForTime:(const CVTimeStamP*)outputTime;@end
我设置了CVdisplaylink回调:
CVdisplaylinkSetoutputCallback(displaylink,MydisplaylinkCallback,self);
我有回调函数:
CVReturn MydisplaylinkCallback (CVdisplaylinkRef displaylink,const CVTimeStamp *inNow,const CVTimeStamp *inOutputTime,CVOptionFlags flagsIn,CVOptionFlags *flagsOut,voID *displaylinkContext){ CVReturn error = [(GameVIEw*)displaylinkContext getFrameForTime:inOutputTime]; return error;}
我陷入困境的部分是在getFrameForTime中做什么:在GameVIEw中绘制图形上下文.我的第一个猜测是绘制方式与drawRect相同:
- (CVReturn)getFrameForTime:(const CVTimeStamP*)outputTime{ CGContextRef ctxCurrent = [[NSGraphicsContext currentContext] graphicsPort]; //.. Drawing code follows}
但是ctxCurrent是零,我认为我理解 – 通常在drawRect之前有一些设置:使你的视图成为当前的上下文.我认为这是我缺少的部分.如何获取我的视图的上下文?
或者我是否以错误的方式解决这个问题?
解决方法 您可以将绘图代码留在-drawRect:然后在MydisplaylinkCallback()中将ivar设置为当前时间并在视图上调用-display.这将强制您的视图立即重绘自己.在-drawRect:方法中,只需使用时间ivar的值来执行为当前动画帧适当更新视图所需的任何绘图.
总结以上是内存溢出为你收集整理的cocoa – 如何从CVDisplayLink回调中绘制到NSView图形上下文?全部内容,希望文章能够帮你解决cocoa – 如何从CVDisplayLink回调中绘制到NSView图形上下文?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)