UIScrollview 计算 ZoomToRect 后新的 CGRect

Posted

技术标签:

【中文标题】UIScrollview 计算 ZoomToRect 后新的 CGRect【英文标题】:UIScrollview calculation of new CGRect after ZoomToRect 【发布时间】:2013-03-22 09:25:31 【问题描述】:

我的问题是在放大UIScrollview 后我无法获得准确的CGRect 值,我使用的是zoomToRectUIScrollview 方法。缩放时我正在设置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;
    

isAlreadyZoomedBOOL

【讨论】:

感谢您的回答。我的问题是我想在缩放后获得 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 的最小缩放比例

为啥我没有得到 UIScrollView 的实际 contentSize?

在 UIScrollView 中调整内容 UIView 的大小,有没有一种好方法可以做到这一点而无需进行任何计算?

UIScrollView笔记