Search code examples
iphoneuigesturerecognizerimage-scaling

iPhone one finger scaling gesturerecognizer


I want to handle scaling and rotation of a view with one corner in that view. I found one tutorial for the rotation. https://github.com/kirbyt/KTOneFingerRotationGestureRecognizer

It makes custom UIGesturRecognizer for rotation using atan2f function. But there is nothing i could find for scaling. Can anybody tell me which is similar math function for scaling or any tutorial help for this purpose.

Any help will be appreciated.


Solution

  • -(void)oneFingerGesture:(UIPanGestureRecognizer *)recognizer { if ([recognizer state] == UIGestureRecognizerStateBegan) { //rotation deltaAngle = atan2([recognizer locationInView:holderView.superview].y-holderView.center.y, [recognizer locationInView:holderView.superview].x-holderView.center.x); startTransform = holderView.transform; //resize prevPoint = [recognizer locationInView:holderView.superview]; [holderView setNeedsDisplay];

    }
    else if ([recognizer state] == UIGestureRecognizerStateChanged)
    {
        //rotation
        float ang = atan2([recognizer locationInView:holderView.superview].y - holderView.center.y, [recognizer locationInView:holderView.superview].x - holderView.center.x);
        float angleDiff = deltaAngle - ang;
        holderView.transform = CGAffineTransformRotate(startTransform, -angleDiff);
    
        //resize
        CGPoint point = [recognizer locationInView:holderView.superview];
        float wChange = 0.0, hChange = 0.0, value=0.0;
    
        wChange = (point.x - prevPoint.x);
        hChange = (point.y - prevPoint.y);
    
        CGFloat radians = atan2f(holderView.transform.b, holderView.transform.a);
        CGFloat degrees = radians * (180 / M_PI);
    
        if (degrees<=0 && degrees>=-90) {
            value=wChange;
        }
        else if (degrees<=-90 && degrees>=-180){
            value=-hChange;
        }
        else if (degrees<=180 && degrees>=90){
            value=-wChange;
        }
        else if (degrees<=90 && degrees>=0){
            value=hChange;
        }
    
        holderView.bounds = CGRectMake(holderView.bounds.origin.x, holderView.bounds.origin.y, holderView.bounds.size.width + (value), holderView.bounds.size.height + (value));
        imageview.frame = CGRectMake(12, 12, holderView.bounds.size.width-24, holderView.bounds.size.height-27);
        View_marqueRotate.frame =CGRectMake(holderView.bounds.size.width-25, holderView.bounds.size.height-25, 25, 25);
        View_marqueClose.frame = CGRectMake(0, 0, 25, 25);
    
        prevPoint = [recognizer locationInView:holderView.superview];
        [holderView setNeedsDisplay];
    
    
    }
    else if ([recognizer state] == UIGestureRecognizerStateEnded)
    {
        //rotation
        deltaAngle = atan2([recognizer locationInView:holderView.superview].y-holderView.center.y, [recognizer locationInView:holderView.superview].x-holderView.center.x);
        startTransform = holderView.transform;
    
        //resize
        prevPoint = [recognizer locationInView:holderView.superview];
        [holderView setNeedsDisplay];
    
    }
    

    }