调整 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的大小不会同时调整大小