Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ZoomToRect后新CGRect的UIScrollview计算_Ios_Objective C_Uiscrollview_Zooming - Fatal编程技术网

Ios ZoomToRect后新CGRect的UIScrollview计算

Ios ZoomToRect后新CGRect的UIScrollview计算,ios,objective-c,uiscrollview,zooming,Ios,Objective C,Uiscrollview,Zooming,我的问题是,在放大UIScrollview后,我无法获得准确的CGRect值。我正在使用UIScrollview的zoomToRect方法。缩放时,我正在设置contentOffset属性 代码如下: if(image != nil) { CGSize zoomViewSize = image.frame.size; CGSize scrollViewSize = self.bounds.size; if(zoomViewSize.widt

我的问题是,在放大
UIScrollview
后,我无法获得准确的
CGRect
值。我正在使用
UIScrollview
zoomToRect
方法。缩放时,我正在设置
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;
此代码在屏幕之间切换我的图像视图。这里一切都很好。我的问题是我必须只显示
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
是图像的缩放区域。此值与我在屏幕上看到的不完全相同。有些地方我正在做计算错误,请帮我解决。但是我没有得到缩放图像区域的确切值


提前感谢使用此工作正常

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

使用此工作正常

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

参考我的答案。当用户双击图像@Gyanandrarefer my answer时,我正在设置缩放。当用户双击图像@Gyanndrathanks以获取答案时,我正在设置缩放。我的问题是我想在缩放后得到cgrect值。缩放后,我调用方法zoomtorect:rect。根据缩放比例,rect的原始值更改为某个值。我想在缩放后得到新cgrect的值。当我设置contentinset值以将图像移到屏幕中间时,我无法在缩放后获得cgrect值。请帮助我,你会在我的答案中得到新的缩放矩形,在那里你也可以写你的缩放。我已经静态地放置了3.0,但是将你的zoomscale放在CGFloat newZoomscal=yourzoomscale的行中;假设在调用[zoomtorect:rect animated:YES]时,CGRect rect=CGRectMake(20,20300300),此方法在缩放后不返回rect值。那么,我如何计算相对于原始矩形的缩放矩形呢?我还设置了contentInset,因此无法获得缩放矩形。为了获得zoomRect,我们将原始rect与scrollView zoomScale相乘,但我正在设置UIScrollView的contentInset属性,因此我无法获得原始rect的zoomRect感谢您的回答。我的问题是我想在缩放后得到cgrect值。缩放后,我调用方法zoomtorect:rect。根据缩放比例,rect的原始值更改为某个值。我想在缩放后得到新cgrect的值。当我设置contentinset值以将图像移到屏幕中间时,我无法在缩放后获得cgrect值。请帮助我,你会在我的答案中得到新的缩放矩形,在那里你也可以写你的缩放。我已经静态地放置了3.0,但是将你的zoomscale放在CGFloat newZoomscal=yourzoomscale的行中;假设在调用[zoomtorect:rect animated:YES]时,CGRect rect=CGRectMake(20,20300300),此方法在缩放后不返回rect值。那么,我如何计算相对于原始矩形的缩放矩形呢?我还设置了contentInset,因此无法获得缩放矩形。为了获取zoomRect,我们将原始rect与scrollView zoomScale相乘,但我正在设置UIScrollView的contentInset属性,因此无法获取与原始rect相关的zoomRect