2013-02-27 21 views
36

Non capisco perfettamente il metodo convertPoint:toView:.Informazioni su convertPoint: toView:

Nella documentazione di Apple è scritto che

convertPoint:toView:

Converte un punto dal sistema di coordinate del ricevitore a quella del vista specificata.

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view 

Ma cosa significa la conversione di un punto da uno all'altro in realtà significa?

Significa che i punti in entrambi i limiti hanno unità diverse? O solo valori diversi?

Se è quest'ultimo, perché esiste un tale metodo quando possiamo semplicemente assegnare il valore di a contentOffset a b's?

CGPoint a = [a contentOffset]; 
[b setContentOffset:a]; 

Come è diverso da convertPoint:toView: semplicemente assegnando contentOffset? O ho frainteso l'intero concetto? Che cosa fanno effettivamente i punti di conversione ? Quando dovrebbe essere usato questo metodo?

+0

Credo che abbia qualcosa a che fare con 'view.transform'. – Cyrille

+0

@Cyrille Che cosa fa view.transform? Assegnare la proprietà del centro a un'altra vista? –

+0

http://stackoverflow.com/questions/2081753/getting-the-bounds-of-an-mkmapview – Rajneesh071

risposta

111

Ogni UIView ha un proprio sistema di coordinate. Quindi se hai un UIView_1 che contiene un altro UIView_2, entrambi hanno un punto (10,10) al loro interno.

convertPoint: toView: consente allo sviluppatore di prendere un punto in una vista e convertire il punto in un altro sistema di coordinate di vista.

Esempio: view1 contiene view2. L'angolo in alto a sinistra della vista2 si trova a view1 point (10,10), o meglio a view2.frame.orgin = {10,10}. Quel {10,10} è basato sul sistema di coordinate view1. Fin qui tutto bene.

L'utente tocca la vista2 al punto {20,20} all'interno della vista2. Ora quelle coordinate sono nel sistema di coordinate view2. Ora puoi usare covertPoint: toView: per convertire {20,20} nel sistema di coordinate della vista1. touchpoint = {20,20}

CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1]; 

Così ora pointInView1Coords dovrebbe essere {30,30} nel view1 sistemi di coordinate. Questa è solo una semplice matematica su questo esempio, ma ci sono tutti i tipi di cose che contribuiscono alla conversione. Trasformazioni e ridimensionamento vengono in mente.

Leggi informazioni sul frame, i limiti e il centro di UIView. Sono tutti collegati e si occupano di sistemi di coordinate per una vista. È confuso fino a quando non inizierai a fare cose con loro. Ricorda che questo frame e il centro sono nel sistema di coordinate del genitore. I limiti sono nel sistema di coordinate della vista.

John