2013-02-27 12 views
36

Ich verstehe nicht ganz die Methode convertPoint:toView:.Understanding convertPoint: toView:

In Apples Dokumentation ist es, dass

convertPoint:toView:

Konvertiert einen Punkt aus dem System zu, dass die angegebenen Ansicht Koordinate des Empfängers geschrieben.

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

Aber was einen Punkt von einem zum anderen bedeutet die Umwandlung tatsächlich?

Bedeutet dies, dass die Punkte in beiden Schranken verschiedene Einheiten haben? Oder nur andere Werte?

Wenn es das letztere ist, warum gibt es solch eine Methode, wenn wir einfach den Wert von a contentOffset zu bs zuweisen können?

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

Wie ist convertPoint:toView: unterscheidet sich von einfach contentOffset zuweisen? Oder habe ich das ganze Konzept falsch verstanden? Was macht umwandeln Punkte tatsächlich tun? Wann sollte diese Methode verwendet werden?

+0

Ich glaube, es hat etwas mit 'view.transform' zu tun. – Cyrille

+0

@Cyrille Was macht View.Transform? Zuweisen von Center-Eigenschaft zu einer anderen Ansicht? –

+0

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

Antwort

111

Jede UIView hat ihr eigenes Koordinatensystem. Wenn Sie also eine UIView_1 haben, die eine andere UIView_2 enthält, haben beide einen Punkt (10,10) in sich.

convertPoint: toView: ermöglicht dem Entwickler, einen Punkt in einer Ansicht zu übernehmen und den Punkt in ein anderes Ansichtskoordinatensystem zu konvertieren.

Beispiel: view1 enthält view2. Die obere linke Ecke von view2 befindet sich am view1-Punkt (10,10), besser gesagt an view2.frame.orgin = {10,10}. Das {10,10} basiert auf dem Koordinatensystem view1. So weit, ist es gut.

Der Benutzer berührt die Ansicht2 an Punkt {20,20} in der Ansicht2. Jetzt sind diese Koordinaten im Koordinatensystem view2. Sie können jetzt covertPoint: toView verwenden, um {20,20} in das Koordinatensystem von view1 zu konvertieren. Berührungspunkts = {20,20}

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

So, jetzt sollte pointInView1Coords seine {30,30} im view1 Koordinatensystem. Nun, das war in diesem Beispiel nur einfache Mathematik, aber es gibt alle möglichen Dinge, die zur Konvertierung beitragen. Es fallen mir Transformationen und Skalierungen ein.

Lesen Sie über UIView Rahmen, Grenzen und Mitte. Sie sind alle verwandt und sie befassen sich mit Koordinatensystemen für eine Ansicht. Es ist verwirrend, bis du damit anfängst, Sachen mit ihnen zu machen. Denken Sie daran, dass Rahmen und Mittelpunkt im Koordinatensystem des Elternteils liegen. Grenzen befinden sich im Koordinatensystem der Ansicht.

John