Moin Jungs,
ich habe hier ein Problem und zwar möchte ich eine ImageView rotieren lassen. Die Bewegung mit dem Finger, soll auf dem GESAMTEN Touchscreen funktionieren und nicht nur auf der ImageView! Ich habe es momentan wie folgt gelöst...
Alles anzeigen
Hier habe ich das Problem, das wenn ich von Quadrant I auf IV oder andersrum wechsle, das die Rotation nicht mehr stimmt. Kann mir dabei jemand helfen? Ich vermute, das ich irgendwo einen Denkfehler habe, finde ihn aber leider nicht.
ich habe hier ein Problem und zwar möchte ich eine ImageView rotieren lassen. Die Bewegung mit dem Finger, soll auf dem GESAMTEN Touchscreen funktionieren und nicht nur auf der ImageView! Ich habe es momentan wie folgt gelöst...
Quellcode
- viewDidLoad
- UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
- [panRecognizer setMaximumNumberOfTouches:1];
- [panRecognizer setMinimumNumberOfTouches:1];
- [self.classicView addGestureRecognizer:panRecognizer];
- [panRecognizer release];
Quellcode
- handlePanFrom:
- CGPoint fingerLocation = [recognizer locationInView:self.classicView];
- // Rotation around Origin
- CGFloat x = fingerLocation.x - 160.0;
- CGFloat y = fingerLocation.y - 201.0;
- CGFloat angel = atan((y/x));
- if (x > 0.0 && y > 0.0) {
- // Quadrant IV
- angel -= (M_PI/2);
- angel *= -1.0;
- angel += (1.5*M_PI);
- } else if (x < 0.0 && y > 0.0) {
- // Quadrant III
- angel *= -1.0;
- angel += M_PI;
- } else if (x < 0.0 && y < 0.0) {
- // Quadrant II
- angel -= (M_PI/2);
- angel *= -1.0;
- angel += (M_PI/2);
- } else if (x > 0.0 && y < 0.0) {
- // Quadrant I
- angel *= -1.0;
- }
- angel *= -1.0;
- if (firstAngel == -1.0) {
- firstAngel = angel;
- } else {
- angel -= firstAngel;
- NSLog(@"Angel: %f - FirstAngel: %f", RadiansToDegrees(angel), RadiansToDegrees(firstAngel));
- CGAffineTransform transform;
- if (self.selectedImage) {
- angel += self.outsideLastRotation;
- angel = [self checkLimitsOfRotation:angel withMaximum:1.83 withMinimum:-1.83];
- transform = CGAffineTransformMakeRotation(angel);
- self.outsideImage.transform = transform;
- CGFloat messpointerCorrectionValue = angel * 0.196977726;
- CGAffineTransform transformForMesspointer = CGAffineTransformMakeRotation(messpointerCorrectionValue);
- self.messpointer.transform = transformForMesspointer;
- if ([recognizer state] == UIGestureRecognizerStateEnded) {
- firstAngel = -1;
- self.outsideLastRotation = angel;
- }
- } else {
- angel += self.insideLastRotation;
- angel = [self checkLimitsOfRotation:angel withMaximum:0 withMinimum:-1.925800];
- transform = CGAffineTransformMakeRotation(angel);
- self.insideImage.transform = transform;
- if ([recognizer state] == UIGestureRecognizerStateEnded) {
- firstAngel = -1;
- self.insideLastRotation = angel;
- }
- }
- }
Hier habe ich das Problem, das wenn ich von Quadrant I auf IV oder andersrum wechsle, das die Rotation nicht mehr stimmt. Kann mir dabei jemand helfen? Ich vermute, das ich irgendwo einen Denkfehler habe, finde ihn aber leider nicht.