UIScrollview 计算 ZoomToRect 后新的 CGRect
Posted
技术标签:
【中文标题】UIScrollview 计算 ZoomToRect 后新的 CGRect【英文标题】:UIScrollview calculation of new CGRect after ZoomToRect 【发布时间】:2013-03-22 09:25:31 【问题描述】:我的问题是在放大UIScrollview
后我无法获得准确的CGRect
值,我使用的是zoomToRect
的UIScrollview
方法。缩放时我正在设置contentOffset
属性。
代码如下:
if(image != nil)
CGSize zoomViewSize = image.frame.size;
CGSize scrollViewSize = self.bounds.size;
if(zoomViewSize.width < scrollViewSize.width)
anOffset.x = -(scrollViewSize.width - zoomViewSize.width) / 2.0;
if(zoomViewSize.height < scrollViewSize.height)
anOffset.y = -(scrollViewSize.height - zoomViewSize.height) / 2.0;
super.contentOffset = anOffset;
缩放后,我正在设置内容插入属性,以便图像位于中心。对于内容插图,代码如下。
-(void)zoomtorect:(CGRect)rect animated:(BOOL)animated
[super zoomtorect:rect animated:YES];
CGFloat pageWidth = image.image.size.height;
CGSize imageSize = rect.size;
CGSize zoomedImageSize = CGSizeMake(imageSize.width * 0.2, imageSize.height * 0.2);
CGSize pageSize = self.bounds.size;
//scLayer.frame = rect;
UIEdgeInsets inset = UIEdgeInsetsZero;
if (pageSize.width > zoomedImageSize.width)
inset.left = (pageSize.width - zoomedImageSize.width) / 2;
inset.right = inset.left;
if (pageSize.height > zoomedImageSize.height)
inset.top = (pageSize.height - zoomedImageSize.height) / 2;
inset.bottom = inset.top;
self.contentInset = inset;
此代码在屏幕之间切换我的图像视图。在这里一切正常。我的问题是我必须只显示imageView
其余部分的缩放部分将是黑色的。为了计算缩放区域,我正在做以下计算。
CGSize imageSize = rect.size;
CGSize zoomedImageSize = CGSizeMake(imageSize.width * scroll.maximumZoomScale, imageSize.height *scroll.maximumZoomScale);
CGSize pageSize = scroll.bounds.size;
UIEdgeInsets inset = UIEdgeInsetsZero;
if (pageSize.width > zoomedImageSize.width)
inset.left = (pageSize.width - zoomedImageSize.width) / 2;
inset.right = inset.left;
if (pageSize.height > zoomedImageSize.height)
inset.top = (pageSize.height - zoomedImageSize.height) / 2;
inset.bottom = inset.top;
CGRect zoomRect = [scroll convertRect:rect fromView:image];
CGRect zoomRect1 = CGRectMake(inset.left, inset.top+50, zoomRect.size.width, zoomRect.size.height);
这个zoomRect1
是图像的缩放区域,这个值与我在屏幕上看到的不完全一致。一些我在做计算错误的地方请帮帮我。但我没有得到缩放图像区域的确切值。
提前致谢
【问题讨论】:
参考我的回答。当用户双击图像@Gyanendra 时,我正在设置缩放 【参考方案1】:使用这个.. 完美运行
- (void)handleDoubleTap:(UIGestureRecognizer *)recognizer
if(isAlreadyZoomed)
CGPoint Pointview = [recognizer locationInView:recognizer.view];
CGFloat newZoomscal = 3.0;
CGSize scrollViewSize = self.scrollContainer.bounds.size;
CGFloat width = scrollViewSize.width/newZoomscal;
CGFloat height = scrollViewSize.height /newZoomscal;
CGFloat xPos = Pointview.x-(width/2.0);
CGFloat yPos = Pointview.y-(height/2.0);
CGRect rectTozoom=CGRectMake(xPos, yPos, width, height);
[self.scrollContainer zoomToRect:rectTozoom animated:YES];
[self.scrollContainer setZoomScale:3.0 animated:YES];
isAlreadyZoomed = NO;
else
[self.scrollContainer setZoomScale:1.0 animated:YES];
isAlreadyZoomed = YES;
isAlreadyZoomed
是 BOOL
值
【讨论】:
感谢您的回答。我的问题是我想在缩放后获得 cgrect 值。我在缩放之后调用方法 zoomtorect:rect ,根据缩放比例将 rect 的原始值更改为某个值。我想在缩放后获取新 cgrect 的值。当我正在设置将图像移动到屏幕中间的 contentinset 值时,我无法在缩放后获得 cgrect 值。请帮帮我 您将在我的答案中获得新的缩放矩形,您也可以在其中编写缩放比例。我已经静态放置了 3.0,但是将您的缩放比例放在 CGFloat newZoomscal = yourzoomscale; 行中 假设 CGRect rect = CGRectMake(20,20,300,300) 当我调用 [zoomtorect:rect animated:YES] 此方法在缩放后不返回 rect 值。那么我如何计算相对于原始矩形的缩放矩形。我也设置了 contentInset,所以我无法获得缩放矩形。为了获得 zoomRect,我们将原始矩形与 scrollView zoomScale 相乘,但我正在设置 UIScrollView 的 contentInset 属性,因此我无法获得相对于原始矩形的 zoomRect以上是关于UIScrollview 计算 ZoomToRect 后新的 CGRect的主要内容,如果未能解决你的问题,请参考以下文章
如何计算运动中 UIScrollView 的目标 contentOffset
UIPageControl + UIScrollView 没有正确计算页面
为啥我没有得到 UIScrollView 的实际 contentSize?