Hi,
angeregt durch PaintCode spiele ich gerade ein wenig mit Pfaden am iPhone herum.
Hab beim drehen über Transforms dann schnell gemerkt, dass sich die Pfade dabei nicht um den Mittelpunkt, sondern ihren Ursprung drehen.
Besteht der Pfad also z.B. aus einem Quadrat, welches vom Punkt 0.0 bis 50.50 geht, "bewegt" sich das Quadrat beim drehen.
Die Lösung schien schnell klar zu sein: statt einem Transform brauche ich drei:
- Pfad verschieben, dass der Mittelpunkt des Pfades auf dem Ursprung (0,0) liegt
- Pfad drehen
- Pfad wieder zurückschieben
so sieht das im Code aus:
Dummerweise wird es dadurch noch schlimmer, das Quadrat ist noch weiter ab vom Schuß.
Hab dann rausgefunden, dass es funktioniert wenn ich die Minus-Zeichen von Zeile 3 nach Zeile 5 verschiebe:
Kann mir jemand erklären warum?
Wenn die Koordinaten der Punkte des Pfads alle positiv sind, müsste ich meinem Verständnis nach den Pfad erst in Richtung negativer Werte verschieben,
und nach dem Drehen dann wieder in die positive Richtung.
Warum ist das gerade andersrum?
angeregt durch PaintCode spiele ich gerade ein wenig mit Pfaden am iPhone herum.
Hab beim drehen über Transforms dann schnell gemerkt, dass sich die Pfade dabei nicht um den Mittelpunkt, sondern ihren Ursprung drehen.
Besteht der Pfad also z.B. aus einem Quadrat, welches vom Punkt 0.0 bis 50.50 geht, "bewegt" sich das Quadrat beim drehen.
Die Lösung schien schnell klar zu sein: statt einem Transform brauche ich drei:
- Pfad verschieben, dass der Mittelpunkt des Pfades auf dem Ursprung (0,0) liegt
- Pfad drehen
- Pfad wieder zurückschieben
so sieht das im Code aus:
Quellcode
- CGRect pathBounds = CGPathGetPathBoundingBox(myPath);
- transform = CGAffineTransformMakeTranslation(-CGRectGetMidX(pathBounds), -CGRectGetMidY(pathBounds));
- transform = CGAffineTransformRotate(transform, 90 / 180.0 * M_PI);
- transform = CGAffineTransformTranslate(transform, CGRectGetMidX(pathBounds), CGRectGetMidY(pathBounds));
- CGPathRef newPath = CGPathCreateCopyByTransformingPath(self.backspaceBezierPath.CGPath, &transform);
- // <-- Hier wird dann dem CAShapeLayer der neue Pfad zugewiesen
- CGPathRelease(newPath);
Dummerweise wird es dadurch noch schlimmer, das Quadrat ist noch weiter ab vom Schuß.
Hab dann rausgefunden, dass es funktioniert wenn ich die Minus-Zeichen von Zeile 3 nach Zeile 5 verschiebe:
Quellcode
- CGRect pathBounds = CGPathGetPathBoundingBox(myPath);
- transform = CGAffineTransformMakeTranslation(CGRectGetMidX(pathBounds), CGRectGetMidY(pathBounds));
- transform = CGAffineTransformRotate(transform, 90 / 180.0 * M_PI);
- transform = CGAffineTransformTranslate(transform, -CGRectGetMidX(pathBounds), -CGRectGetMidY(pathBounds));
- CGPathRef newPath = CGPathCreateCopyByTransformingPath(self.backspaceBezierPath.CGPath, &transform);
- // <-- Hier wird dann dem CAShapeLayer der neue Pfad zugewiesen
- CGPathRelease(newPath);
Kann mir jemand erklären warum?
Wenn die Koordinaten der Punkte des Pfads alle positiv sind, müsste ich meinem Verständnis nach den Pfad erst in Richtung negativer Werte verschieben,
und nach dem Drehen dann wieder in die positive Richtung.
Warum ist das gerade andersrum?
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Tobse001 ()