Domanda

Ho un UIScrollView che contiene un'immagine e un controllo segmentato che consente all'utente di cambiare l'immagine all'interno di ScrollView. Se cambio semplicemente l'immagine all'interno di UIImageView, visualizzerà la nuova immagine nello stato ingrandito. Come ripristinare UIScrollView allo stato non ingrandito?

È stato utile?

Soluzione

Ho una discussione dettagliata di come (e perché) lo zoom UIScrollView funziona su github.com/andreyvit/ScrollingMadness / .

(Il collegamento contiene anche una descrizione di come ingrandire UIScrollView a livello di programmazione, come emulare paging + zoom + scorrimento in stile Photo Library, un progetto di esempio e la classe ZoomScrollView che incapsula parte della magia dello zoom.)

Quote:

UIScrollView non ha una nozione di & # 8220; livello di zoom corrente & # 8221; poiché ogni sottoview che contiene può avere il proprio livello di zoom corrente. Si noti che in UIScrollView non è presente alcun campo per mantenere l'attuale livello di zoom. Tuttavia sappiamo che qualcuno memorizza quel livello di zoom, perché se esegui il pizzico-zoom di una sottoview, reimposta la sua trasformazione in CGAffineTransformIdentity e poi pizzichi di nuovo, noterai che il precedente livello di zoom della subview è stato ripristinato.

In effetti, se si osserva lo smontaggio, è UIView che memorizza il proprio livello di zoom (all'interno dell'oggetto UIGestureInfo a cui punta il campo _gestureInfo). Ha anche una serie di simpatici metodi non documentati come zoomScale e setZoomScale: animato: . (Intendiamoci, ha anche un sacco di metodi relativi alla rotazione, forse un giorno avremo presto il supporto per i gesti di rotazione.)

Tuttavia, se creiamo una nuova UIView solo per lo zoom e aggiungiamo la nostra visualizzazione zoomabile reale come figlio, inizieremo sempre con il livello di zoom 1.0. La mia implementazione dello zoom programmatico si basa su questo trucco.

Altri suggerimenti

Se non stai ridisegnando la vista al completamento dell'evento di zoom con pizzicamento, il fattore di zoom viene impostato dalla proprietà di trasformazione della vista restituita dal metodo viewForZoomingInScrollView: delegate. Per reimpostare questo zoom, imposta il valore della proprietà transform della vista su CGAffineTransformIdentity.

Attenzione, tuttavia, che la prossima operazione di ingrandimento del pizzico inizierà da dove era stato interrotto il precedente zoom del pizzico (ovvero, la tua nuova scala verrà ignorata). Per ovviare a questo, potrebbe essere necessario implementare parte di ciò che descrivo qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top