Ich versuche, das Quarz-2d-Koordinatensystem zu verstehen. Derzeit lese ich das Apple Referenzhandbuch und das alte Buch "Quartz 2d graphics for mac os x developer".
Ich verstehe das Konzept des Benutzerraums und des Geräteraums so, dass der Geräteraum ein anderes Standard-Koordinatensystem haben kann und die Koordinaten des Geräteraums nicht geändert werden können, und wir den Benutzerraum abbilden, indem wir sein Koordinatensystem entsprechend dem Geräteraum ändern, um das gewünschte Ergebnis zu erzielen.
- Erster Teil des Problems
Quartz 2d graphics for mac os x developer book sagt:
Beim Transformieren eines Koordinatensystems, müssen Sie eine andere Koordinatensystem haben, mit dem man es vergleichen kann. Die Transformation liefert eine relative Abbildung von einem Koordinatensystem auf das andere. Wenn Sie im transformierten Koordinatensystem zeichnen, bildet die Transformation die Grafik zurück auf das erste Koordinatensystem . Das Aussehen dieser Grafik im festen Koordinatensystem wird durch den Transformation beeinflusst.
Ich habe diesen fettgedruckten Punkt nicht verstanden.
Und
Quartz 2D Programmieranleitung sagt:
Quartz erreicht die Geräteunabhängigkeit mit einem separaten Koordinatensystem Koordinatensystem - dem Benutzerraum - und ordnet es dem Koordinatensystem des Ausgabegeräts zu Geräts - dem Geräteraum - unter Verwendung der aktuellen Transformationsmatrix (CTM). A Matrix ist ein mathematisches Konstrukt, das zur effizienten Beschreibung eines Satzes von zusammenhängenden Gleichungen zu beschreiben. Die aktuelle Transformationsmatrix ist eine besondere Art von Matrix, eine sogenannte affine Transformation, die Punkte von einem Koordinatenraum in einen anderen durch Anwendung von Translations-, Rotations- und Rotations- und Skalierungsoperationen (Berechnungen, die ein Koordinatensystem verschieben, rotieren und Größenänderung eines Koordinatensystems).
Die aktuelle Transformationsmatrix hat einen zweiten Zweck: Sie ermöglicht die Art und Weise zu verändern, wie Objekte gezeichnet werden. Um zum Beispiel einen Kasten zu zeichnen um 45 Grad gedreht zu zeichnen, drehen Sie das Koordinatensystem der Seite (die CTM), bevor Sie den Rahmen zeichnen. Quarz zeichnet zum Ausgabegerät unter Verwendung des gedrehten Koordinatensystems.
Verwirrend ist, dass "Quartz zeichnet auf das Ausgabegerät mit dem gedrehten Koordinatensystem.", wenn ich ein Objekt (Bild etc.) gedreht und andere ohne Drehung zeichnen wollen, was dann passieren? Wir haben ganze Koordinaten gedreht alles, was gezeichnet wird, ist gedreht?
Ich versuche verschiedene Experimente, aber nicht in der Lage, meinen Kopf zu wickeln um diese, ich ein Bild meine Zeichnung zwei Linie repliziert unten links Koordinatensystem in Photoshop und dann zu meinem Projekt hinzugefügt, um sichtbar zu sehen, wie Koordinaten verhalten sich durch den Aufruf CGContextRotateCTM(myContext, 45);
in drawrect-Methode, aber es tat nichts, um Bild, das ich in xib-Datei mit Interface Builder Platzierung Bild innerhalb uiimage enthalten.
Dieser Code stammt aus dem Quarz 2D Programmierhandbuch
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGRect contextRect = self.bounds;
CGContextTranslateCTM(myContext, 0, contextRect.size.height);
CGContextRotateCTM(myContext, 45); //my modification
CGContextScaleCTM(myContext, 1, -1);
float w, h;
w = contextRect.size.width;
h = contextRect.size.height;
CGAffineTransform myTextTransform;
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
CGContextSetCharacterSpacing (myContext, 10);
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke);
CGContextSetRGBFillColor (myContext, 0, 1, 0, .5);
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1);
myTextTransform = CGAffineTransformMakeRotation(0);
CGContextSetTextMatrix (myContext, myTextTransform);
CGContextShowTextAtPoint (myContext, 0, 50, "Quartz 2D", 9);
aber dieser Code ändert den auf dem Bildschirm gezeichneten Text und nicht das Bild, das ich hinzugefügt habe?
- Zweiter Teil des Problems
Dies ist auch aus dem Quartz 2D Programmierhandbuch:
... eine Transformation anwenden, die den Ursprung in die obere linke Ecke Ecke des PDF-Kontexts verschiebt und die y-Koordinate um -1 skaliert.
Die Verwendung einer Skalierungstransformation zur Negierung der y-Koordinate ändert einige Konventionen beim Zeichnen in Quartz. Zum Beispiel, wenn Sie CGContextDrawImage aufrufen, um ein Bild in den Kontext zu zeichnen, wird das Bild durch die Transformation verändert, wenn es in das Ziel gezeichnet wird. ...
Ich habe bereits diese -1 Sache, aber keine Wirkung auf das Bild und diese -1 Sache ist immer noch nicht klar zu mir.
Ich habe dieses Dokument mehrmals gelesen und versucht, über Google zu suchen, aber es gibt keine nützlichen Anleitungen und auch keine aktuellen Bücher, sondern nur Bücher aus den Jahren 2004, 2005 und 2006. Kann mir jemand diesbezüglich helfen oder mir nützliche Ressourcen nennen, um dies in der Tiefe zu lernen.
Ich warte verzweifelt auf Antworten, ich brauche wirklich Hilfe. Ich danke Ihnen.