1
votes

I have one uiimageview which is added as subview in uiview. frame for uiimageview is uiview's bounds. I am using this uiview just to show the border. Now when i rotate the imageview, only image view is rotated, but while rotating extra part beyond uiview is getting clipped. How can i resize uiview along with image views rotation.

This is my code. I have done what you have said but view is not resizing

 - (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {



float rotation = angle + -recognizer.rotation;

recognizer.view.transform = CGAffineTransformMakeRotation(-rotation);


if (recognizer.state == UIGestureRecognizerStateEnded) {

    angle = rotation;

}  

    CGFloat diagonal = sqrt( recognizer.view.bounds.size.width*recognizer.view.bounds.size.width + recognizer.view.bounds.size.height*recognizer.view.bounds.size.height );

    CGRect rect = view.frame;
    rect.origin.x -= ((rect.size.width-diagonal)/2);
    rect.origin.y -= ((rect.size.height-diagonal)/2);
    rect.size.width = diagonal;
    rect.size.height = diagonal;
   view.frame = rect;


}
2

2 Answers

1
votes

Find the diagonal of the UIImageView.

CGFloat diagonal = sqrt( imageview.size.width*imageview.size.width + imageview.size.height*imageview.size.height );

Then set it to the UIView's frame.

CGRect rect = view.frame;
rect.origin.x -= ((rect.size.width-diagonal)/2);
rect.origin.y -= ((rect.size.height-diagonal)/2);
rect.size.width = diagonal;
rect.size.height = diagonal;
view.frame = rect;

Edit: In the following line, you may not need the bounds size.

   CGFloat diagonal = sqrt( recognizer.view.bounds.size.width*recognizer.view.bounds.size.width + recognizer.view.bounds.size.height*recognizer.view.bounds.size.height );

Try as the following:

CGFloat diagonal = sqrt( recognizer.view.frame.size.width*recognizer.view.frame.size.width + recognizer.view.frame.size.height*recognizer.view.frame.size.height );
0
votes

You can do this like..

     float minX = MIN(self.imgDisplayImage.frame.origin.x,self.imgDisplayImage.frame.origin.x+self.imgDisplayImage.frame.size.width);
     float maxX = MAX(self.imgDisplayImage.frame.origin.x,self.imgDisplayImage.frame.origin.x+self.imgDisplayImage.frame.size.width);


     float minY = MIN(self.imgDisplayImage.frame.origin.y,self.imgDisplayImage.frame.origin.y+self.imgDisplayImage.frame.size.height);
     float maxY = MAX(self.imgDisplayImage.frame.origin.y,self.imgDisplayImage.frame.origin.y+self.imgDisplayImage.frame.size.height);


     float finalWidth = maxX-minX; 
     float finalHeight = maxY-minY; 


     CGPoint initialCenter = self.center;
     self.frame = CGRectMake(minX, minY,finalWidth,finalHeight);

     CGPoint newCenter;
     newCenter.x = initialCenter.x+minX;
     newCenter.y = initialCenter.y+minY;

     self.center = newCenter;


     CGPoint imgCenter = self.imgDisplayImage.center;


     self.imgDisplayImage.center = CGPointMake(imgCenter.x-minX, imgCenter.y-minY);