2011-08-01 4 views
1

J'essaie d'obtenir un zoom pincement dans un NSCollectionView en mettant en œuvre -(void)magnifyWithEvent:(NSEvent *)event, mais je ne suis pas sûr de ce qu'il faut faire dans cette méthode. Je reçois le montant du zoom avec [event magnification], et maintenant j'ai besoin d'actualiser les éléments dans la vue de la collection.NSCollectionView pincer zoom

Je pensais que je pouvais sauver ce dans une zoomValue variable et remplacer la méthode - (NSCollectionViewItem *)newItemForRepresentedObject:(id)object afin de redimensionner la vue de chaque élément de collection (je pense que cela ne fonctionnera pas, cependant. Et de toute façon je ne sais pas comment pour déclencher le "refresh" d'une vue de collection).

Des idées à ce sujet? Merci.

Répondre

1

Je fais quelque chose de similaire, mais à partir d'un curseur au lieu d'un pincement. Vous avez juste besoin d'appeler:

[collectionView setMinItemSize:newSize]; 
[collectionView setMaxItemSize:newSize]; 
[collectionView setNeedsDisplay:YES]; 

Pour obtenir le Redimensionner pour se produire en direct pendant la traînée du curseur, je devais appeler une méthode privée - [NSCollectionView _updateGridWithCurrentItemsIfNecessary], sinon le Redimensionner n'a pas eu lieu jusqu'à mouseup . Je ne sais pas si vous aurez le même problème.

+0

Merci, voilà ce que je dois. Juste une note rapide, le '_updateGridWithCurrentItemsIfNecessary' est-il toujours là? Je ne peux pas le trouver. – Donovan

+1

C'est une méthode privée donc vous ne le verrez pas dans la documentation. Comme c'est privé, il est important d'encapsuler les appels aux méthodes privées avec respondsToSelector: checks. C'était la seule façon que je pouvais trouver pour mettre à jour la vue immédiatement au lieu d'attendre la boucle de l'événement principal. –