2010-07-27 2 views
0

J'ai utilisé ce guide: http://developer.apple.com/mac/library/qa/qa2004/qa1346.html pour implémenter la mise à l'échelle dans une vue spéciale. La vue mise à l'échelle est la vue de document d'un NSScrollView. Le problème est que lorsque j'appelle -scaleUnitSquareToSize, alors appelez -setNeedsDisplay: YES (j'ai aussi essayé -setNeedsDisplay: YES dans la vue déroulante), la vue (pas les barres de défilement, juste tout à l'intérieur) devient vide. Si je redimensionne la fenêtre qui contient la vue, son contenu réapparaît et s'affiche correctement. Mais dès que je redimensionne et redessine, il disparaît à nouveau. Des idées sur la façon de forcer la vue à rafraîchir correctement?NSView -scaleUnitSquareToSize laisse l'affichage vide jusqu'à ce qu'il soit redimensionné malgré le message -setNeedsDisplay

En outre, désolé de ne pas fournir le code source, mais le code est secret commercial, alors ...

Répondre

1

sonne comme le ClipView n'est pas mis à jour pour se faire face à l'échelle de votre contentView. Essayez de consigner le cadre et les limites du documentview, du clipview et du contentview.

+0

Eh bien, j'ai vérifié les limites et les valeurs de cadre pour les 3 vues, et les valeurs ne sont pas différentes dans les deux cas (invisible ou visible). Voir http://cl.ly/1o6F pour plus de détails sur les limites et les valeurs d'image et les étapes à reproduire. Fondamentalement, c'est scale-> invisible, resize-> visible, unscale-> invisible, rescale-> visible, et après cette séquence je me retrouve avec une vue visible qui est mise à l'échelle. Mais toutes les valeurs de frame et de bounds des vues scaled/invisible et scaled/visible correspondent. Cela n'aide pas non plus à envoyer setNeedsDisplay à toutes les vues. –

+0

Huh ... Je viens de le réparer en appelant [[self documentView] setFrame: [[self documentView] cadre]]; 'après la mise à l'échelle. Bizarre ... –

+0

l'envoi de '-setFrame:' va forcer tout ce qui est au-dessus de votre vue dans la hiérarchie de vue pour redessiner le rect englobant le nouveau cadre et le cadre précédent, et ce dessin sera vidé à l'écran. Ce n'est pas clair pour moi pourquoi cela ne fonctionnait pas déjà pour vous. Je recommande de déposer un rapport de bogue. – NSResponder

Questions connexes