Sto usando uno zoom UIScrollView per mostrare le immagini nella mia app per iPad. Lo zoom funziona alla grande, con un pizzico che rende l'immagine più piccola o più grande, a seconda dei casi. Ho anche abilitato il bouncesZoom
in modo che rimbalzi allo zoom minimo o massimo se l'utente lo allunga troppo in un modo o nell'altro.Come posso cancellare un rimbalzo dello zoom UIScrollView?
Ora mi piacerebbe riconoscere quando un pizzico si è concluso con l'immagine del 10% più piccola della dimensione minima dello zoom e, in tal caso, evitare il rimbalzo e attivare un'animazione diversa che riduce l'immagine a " chiudilo. In questo modo, può esserci una sorta di gesto "pizzica per chiudere". Quello che mi è venuta in mente per fare questo, nella sua più semplice, è questo:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
if (self.zoomBouncing && zoomedToScale/self.minimumZoomScale < 0.90) {
// We've let go and were under 90% of the minimum size.
self.minimumZoomScale = zoomedToScale;
[self shrinkImageToNothing];
} else {
// How far have we gone?
zoomedToScale = self.zoomScale;
}
}
Questa grande opera, tranne che a questo punto è già rimbalza, quindi l'impostazione di minimumZoomScale
non fa nulla. Pertanto, il rimbalzo e lo restringimento si verificano nello stesso momento, il che, come puoi immaginare, sembra piuttosto strano.
Quindi la mia domanda è: come posso evitare che il rimbalzo si verifichi solo in questa specifica situazione? Non esiste un metodo UIScrollViewDelegate che permetta al mio codice di fare qualcosa tra quando il gesto finisce e quando UIScrollView decide di riprendersi. Ho provato un sacco di altre tecniche senza fortuna, tra cui:
- Tornando
nil
da–viewForZoomingInScrollView:
quando è passata la mia soglia di zoom 90%. Non funziona perché questo metodo viene chiamato all'avvio del gesto, non per ogni punto dello zoom. - L'impostazione in
-scrollViewDidZoom:
su falso quando il fattore di zoom è inferiore a 90% e su true quando è maggiore o uguale a 90%. Rende l'immagine tremolante quando la scala scende al di sotto del 90% perché non consente quella dimensione quando lobouncesZoom
è falso. - Aggiunta di un metodo
-touchesEnded:withEvent
. Non viene mai chiamato. - Aggiunta del mio UIPinchGestureRecognizer da eseguire contemporaneamente al riconoscimento pinch di UIScrollView. Non funziona perché i suoi gestori (e metodi delegati) sono chiamati dopo il il gesto di pizzicamento di UIScrollView, che rende la decisione di rimbalzare prima che il mio gesto possa dirlo non troppo. Ho provato a rimuovere tutti i gesti principali, aggiungendo il mio e aggiungendo i gesti principali. Ma il mio gesto era ancora chiamato chiamato dopo che UIScrollView aveva deciso che stava saltando.
Quindi sono un po 'una perdita. Qualcun altro ha provato a fare qualcosa di simile?
Cosa sta facendo shrinkImageToNothing e dove viene impostato cachedMinZoomScale? – jjxtra