2010-04-21 26 views
4

Lorsque je place un NSOpenglView dans NSSplitView, un problème survient lors du glissement du séparateur. Les fonctions OpenGLView et SplitView sont redimensionnées de manière asynchrone. J'ai trouvé une solution dans le fil de liste de messagerie Apple http://developer.apple.com/mac/library/samplecode/GLChildWindowDemo/Introduction/Intro.htmlNSOpenGLView dans NSSplitView

et j'ai trouvé une solution avec quelques appels de carbone. mais maintenant je reçois une erreur de lien (seulement en mode release). Donc, j'ai deux questions - y at-il une façon cacao pour résoudre le problème splitter-gl?

si non - comment puis-je corriger les erreurs du linker carbone en mode release?

+0

Les wrappers de carbone probablement déconseillés envoient l'erreur de liaison. D'un autre côté, j'ai lu que les éléments OpenGL et UIKit ne fonctionnent pas correctement ... Je recommanderais d'utiliser un seul framework. –

+0

Il n'y a pas d'UIKit ici, c'est une question Cocoa/Mac. –

Répondre

4

J'ai trouvé la réponse.

la bonne façon est de mettre en œuvre des méthodes de thees dans votre myWindow: NSWindow

BOOL needsEnableUpdate; 

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

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

et délégué NSSplitterView mettre en œuvre

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

mon problème était que j'ai essayé d'utiliser des appels de carbone:

DisableScreenUpdates(); 
EnableScreenUpdates(); 

au lieu de celles au cacao:

NSDisableScreenUpdates(); 
NSEnableScreenUpdates(); 
+0

Je voulais juste dire MERCI MERCI MERCI. Tu gères. – Morgan

+0

Pour le tremblement de clarté, je voudrais écrire: - (void) disableUpdatesUntilFlush { if (! NeedsEnableUpdate) { NSDisableScreenUpdates(); needsEnableUpdate = YES; } } –