调整 uiview 的大小以及 uiimageview 的旋转

Posted

技术标签:

【中文标题】调整 uiview 的大小以及 uiimageview 的旋转【英文标题】:Resize uiview along with rotation of uiimageview 【发布时间】:2012-01-10 11:49:44 【问题描述】:

我有一个 uiimageview 作为子视图添加到 uiview 中。 uiimageview 的框架是 uiview 的边界。我使用这个 uiview 只是为了显示边框。现在,当我旋转图像视图时,只有图像视图被旋转,但是在旋转 uiview 之外的额外部分时被剪裁。如何调整 uiview 的大小以及图像视图的旋转。

这是我的代码。我已经按照你说的做了,但是视图没有调整大小

 - (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;



【问题讨论】:

【参考方案1】:

找到 UIImageView 的对角线。

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

然后将其设置为 UIView 的框架。

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;

编辑: 在以下行中,您可能不需要边界大小。

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

尝试如下:

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

【讨论】:

但是 uiview 的起源是什么,也应该用旋转来改变。 不,在我的代码中,来源是相同的。只是我增加了它的宽度和高度。如果你也想移动原点,你可以。 我已经更新了我的答案,这样原点也会被移动。 我已经用代码更新了我的问题。你能告诉我有什么问题吗。 但是这里所有角度的对角线长度都是相同的。我想根据角度变化调整uiview的大小。【参考方案2】:

你可以这样做......

     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);

【讨论】:

您是否考虑解释一下,以便找到此答案的人能够理解它?

以上是关于调整 uiview 的大小以及 uiimageview 的旋转的主要内容,如果未能解决你的问题,请参考以下文章

使用UIToolbar调整UIView的大小不会同时调整大小

如何调整 UIView 的大小并强制其子视图调整大小

UIView 层不随视图调整大小?

调整 UIView 的大小并在 drawRect 中动态调整绘图的大小

创建后调整uiview子类的大小

通过保持纵横比和宽度调整 UIImage 的大小