2010-04-21 4 views
4

Когда я устанавливаю NSOpenglView в NSSplitView, возникает проблема при перетаскивании сплиттера. OpenGLView и SplitView изменяют размер асинхронно. Я нашел решение в списке писем в яблоке http://developer.apple.com/mac/library/samplecode/GLChildWindowDemo/Introduction/Intro.htmlNSOpenGLView в NSSplitView

и я нашел решение с некоторыми вызовами углерода. но теперь я получаю ошибку связи (только в режиме выпуска).

поэтому у меня есть два вопроса - есть ли способ какао исправить проблему splitter-gl? если нет - как я могу исправить ошибки компоновщика углерода в режиме деблокирования?

+0

Вероятно, устаревшие углеродные обертывания отправляют ошибку связывания. С другой стороны, я читал, что элементы OpenGL и UIKit просто не играют правильно ... Я рекомендую использовать единую Framework, это возможно. –

+0

Здесь нет UIKit, это вопрос Cocoa/Mac. –

ответ

4

Я нашел ответ.

правильный путь для реализации методов thees в вашем MyWindow: NSWindow

BOOL needsEnableUpdate; 

-(void)disableUpdatesUntilFlush 
{ 
    if(!needsEnableUpdate) 
     NSDisableScreenUpdates(); 
    needsEnableUpdate = YES; 
} 

-(void)flushWindow 
{ 
    [super flushWindow]; 
    if(needsEnableUpdate) 
    { 
     needsEnableUpdate = NO; 
     NSEnableScreenUpdates(); 
    } 
} 

и NSSplitterView делегатом реализации

#pragma mark NSSplitView Delegate 
-(void)splitViewWillResizeSubviews:(NSNotification *)notification 
{ 
    [window disableUpdatesUntilFlush]; 
} 

моя проблема заключалась в том, что я пытался использовать углеродные звонки:

DisableScreenUpdates(); 
EnableScreenUpdates(); 

вместо какао:

NSDisableScreenUpdates(); 
NSEnableScreenUpdates(); 
+0

Просто хотел сказать СПАСИБО ВАМ СПАСИБО. Ты жжешь. – Morgan

+0

Для сотрясения ясности, я хотел бы написать: - (Недействительными) disableUpdatesUntilFlush { если (! NeedsEnableUpdate) { NSDisableScreenUpdates(); needsEnableUpdate = YES; } } –