Search code examples
iphoneuiimageviewcore-animationuitouch

Rotate the image corresponding to the touch drag in iPhone


I want to rotate the image in clockwise or anticlockwise direction corresponding to the user touch drag with its speed. I think this can be done with some math and logic. What would a code sample for this look like?


Solution

  • If you're targeting iOS 3.2 or greater, you can use UIRotationGestureRecognizer. The code would look something like this:

    In your setup method (viewDidLoad or init, etc,):

    UIRotationGestureRecognizer *rotationGesture = 
      [[UIRotationGestureRecognizer alloc] initWithTarget:self
                                                   action:@selector(handleRotate:)];
    rotationGesture.delegate = self;
    [myImageView addGestureRecognizer:rotationGesture];
    [rotationGesture release];
    

    The event handler:

    - (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {
      if(recognizer.state == UIGestureRecognizerStateBegan || 
         recognizer.state == UIGestureRecognizerStateChanged)
      {
        recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, 
                                                            recognizer.rotation);
        [recognizer setRotation:0];
      }
    }
    

    I have some more examples of gesture recognizers (including the one above) on github.