ich folgendes gelesen habe, von One step affine transform for rotation around a point?:Wie kann ich ein Bild zuverlässig um einen Punkt drehen?
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
transform = CGAffineTransformRotate(transform, a);
transform = CGAffineTransformTranslate(transform,-x,-y);
Allerdings, wenn ich tun dies die transformierten Bilder über die ganze Karte sind, und nur selten über den Bildschirm.
Ich habe ein bisschen versucht, ein System zu machen, wo es Bilder setzt; Wenn Sie eine Schleife ausführen und mehrere Werte platzieren, wird eine Spirale angezeigt. Während ich vielleicht in der Lage sein würde, die Beziehung zwischen einer Rotation von Bildern und den Punkten, über die ich sie drehen wollte, zu lösen, wollte ich nach der besten Lösung fragen: "Ich habe hier ein Bild; Ich möchte, dass es um diesen Betrag herum gedreht wird, aber nicht anders. "
Ich versuche einen modifizierten Port von http://JonathansCorner.com/ancient-clock/ zu machen, und im Moment versuche ich den Stundenzeiger zu platzieren. Alle Versuche, das Lied und den Tanz oben zu machen und es so zu übersetzen, dass sein Zentrum in der gewünschten Mitte ist, sind gescheitert.
Wie, für die Hände dieser Uhr, kann ich sagen "Ich möchte die Hände in den folgenden Rotationen" und haben sie angemessen um das Zentrum gelegt?
--EDIT--
Der entscheidende Teil dieses Codes in einem Versuch, bearbeitet Schichten auf einen Kommentar in Reaktion zu verwenden, ist:
UIImage *hourHandImage = [UIImage imageNamed:@"hour-hand.png"];
UIImageView *hourHandView = [[UIImageView alloc] initWithImage:hourHandImage];
float hourRotation = .5;
hourHandImage = [UIImage imageNamed:@"hour-hand.png"];
hourHandView = [[UIImageView alloc] initWithImage:hourHandImage];
CGAffineTransform transform = CGAffineTransformMakeTranslation(centerX - 21, -centerY - 121);
// transform = CGAffineTransformRotate(transform, hourRotation);
// transform = CGAffineTransformTranslate(transform, 2 * centerX, 2 * centerY);
hourHandView.transform = transform;
hourHandView.layer.anchorPoint = CGPointMake(centerX, centerY);
hourHandView.layer.affineTransform = CGAffineTransformRotate(transform, hourRotation);
[self.view addSubview:hourHandView];
Danke,
- EDIT--
Ich habe jetzt etwas reduziert; wenn ich einige der Anweisungen folgen, die ich habe:
CGAffineTransform transform = CGAffineTransformMakeTranslation(100 -21, 100 -121);
transform = CGAffineTransformRotate(transform, hour/12.0 * M_PI * 2.0);
transform = CGAffineTransformTranslate(transform, -330, 330);
hourHandView.transform = transform;
ich immer diese Zahlen aus arbeiten möchte, aber dies hat eine Stunde von 9.00 Uhr richtig angezeigt.
Vielen Dank für Ihre Hilfe!
Haben Sie ein paar Beispielbilder Sie Beiträge verfassen können? Was nennst du als 'x' und' y' hier? Sie sollten die Hälfte der Breite bzw. Höhe des Begrenzungsrechtecks der Sache sein, die Sie zu drehen versuchen. –
Auch was ist 'a'? Beachten Sie, dass es in Radianten, nicht Grad ausgedrückt werden muss. –
Alle geometrischen Manipulationen zur Ansicht finden um den Ankerpunkt statt. Beispiel: Wenn ankerPoint = {0.5.0.5} (Mitte), rotiert die Ansicht so, als ob es eine z-Achse quer durch das Zentrum gäbe. Clock Hände rotiert fast um die Spitze herum, also brauchen Sie etwas wie hourHand.layer.anchorPoint = CGPointMake (0.5f, 0.9f); – Jano