Search code examples
ioscgaffinetransformtouchmove

Rotate imageView as per touch


I am rotating imageView which is minuit hand of a clock, with

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
  {
    UITouch *touch = [touches anyObject];
    if ([touch view] == _imgViewMinuit)
    {
        NSLog(@"Touched");
        _imgMinuitHand.transform = CGAffineTransformRotate(_imgMinuitHand.transform,DEGREES_RADIANS(6));
     }
 }

Now i want to rotate it as per my finger, clockwise/anticlockwise, with speed of my touch.

How I can achieve this ?


Solution

  • check this code

    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch=[[event allTouches]anyObject];
    
        [self transformSpinnerwithTouches:touch];
    }
    
    -(void)transformSpinnerwithTouches:(UITouch *)touchLocation
    {
        CGPoint touchLocationpoint = [touchLocation locationInView:self.view];
        CGPoint PrevioustouchLocationpoint = [touchLocation previousLocationInView:self.view];
        //origin is the respective piont from that i gonna measure the angle of the current position with respective to previous position ....
        CGPoint origin;
        origin.x = arrow.center.x;
        origin.y = arrow.center.y;
        CGPoint previousDifference = [self vectorFromPoint:origin toPoint:PrevioustouchLocationpoint];
        CGAffineTransform newTransform = CGAffineTransformScale(arrow.transform, 1, 1);
        CGFloat previousRotation = atan2(previousDifference.y, previousDifference.x);
        CGPoint currentDifference = [self vectorFromPoint:origin toPoint:touchLocationpoint];
        CGFloat currentRotation = atan2(currentDifference.y, currentDifference.x);
        CGFloat newAngle = currentRotation- previousRotation;
        temp1 = temp1 + newAngle;
        //NSLog(@"temp1 is %f",temp1);
        //NSLog(@"Angle:%F\n",(temp1*180)/M_PI);
        newTransform = CGAffineTransformRotate(newTransform, newAngle);
        [self animateView:arrow toPosition:newTransform];
    }
    -(void)animateView:(UIView *)theView toPosition:(CGAffineTransform) newTransform
    {
    arrow.transform = newTransform;
    }
    
    -(CGPoint)vectorFromPoint:(CGPoint)firstPoint toPoint:(CGPoint)secondPoint
    {
        CGFloat x = secondPoint.x - firstPoint.x;
        CGFloat y = secondPoint.y - firstPoint.y;
        CGPoint result = CGPointMake(x, y);
        //NSLog(@"%f %f",x,y);
        return result;
    }