【问题标题】:Using a UIScrollView zoomToRect works when zooming to an images width but not its height缩放到图像宽度而不是高度时,使用 UIScrollView zoomToRect 有效
【发布时间】:2012-02-22 23:32:26
【问题描述】:

我正在尝试放大 UIImage,以便在不显示空白的情况下尽可能多地看到照片。因此,在纵向中,我想缩放以使图像两侧中较短的一侧完全适合屏幕。以下所有代码都在viewDidLoad中。

我的UIImageViewUIScrollView 设置如下:

self.scrollView.delegate = self;
self.scrollView.contentSize = self.imageView.image.size;
self.imageView.frame = CGRectMake(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);

此时,UIScrollView 内的缩放和滚动效果很好。

然后我实现一个if-else,这样当图片比它高时我调用:

[self.scrollview zoomToRect:CGRectMake(0, 0, IMAGE_WIDTH, 1)];

这非常有效。图片的宽度填满了屏幕的宽度,我只能上下滚动。

但是当我为高度调用完全相同的函数时:

[self.scrollview zoomToRect:CGRectMake(0, 0, 1, IMAGE_HEIGHT)];

没什么!根本没有缩放,好像从未调用过该函数。但是我在调​​试器中设置了一个断点并单步执行了代码,一切都被完美地调用了,甚至是CGRectMake 函数本身。怎么回事?

【问题讨论】:

  • 这是放大到一个实际上只是一条线的矩形......这是你想要发生的事情吗?
  • 是的,因为zoomToRect 只是缩放以将整个矩形放在屏幕上,因此另一个维度是任意的。
  • 嗯,那么其中一个维度可能优先……它怎么知道哪个维度是任意的?如果纵横比关闭,也许宽度优先,从而使您的第二种方法无效?
  • 宽度优先是什么意思?该方法将整个矩形放在屏幕上的工作量最少,因此宽度为 1 和图像的高度应该只是缩放,使得图像的顶部和底部与顶部和底部对齐屏幕。它并没有试图真正放大整个矩形。
  • 我尝试了与上述相同的方法,但宽度符合纵横比(IMAGE_HEIGHT * 360) / 480,但没有任何区别。

标签: iphone objective-c ios5 uiscrollview


【解决方案1】:

根据上面的 cmets,确保为要缩放到的给定纵横比选择具有宽度和高度的矩形。

[self.scrollview zoomToRect:CGRectMake(0, 0, IMAGE_WIDTH * WIDTH_OF_VIEW / HEIGHT_OF_VIEW, IMAGE_HEIGHT)];

【讨论】:

    【解决方案2】:

    zoomToRect 方法也有参数“动画”,即:

    [self.scrollview zoomToRect:CGRectMake(0, 0, 1, IMAGE_HEIGHT) animated:NO];
    

    所以这可能是导致问题的原因。如果没有,你可以试试这个:

    CGFloat scale1 = IMAGE_WIDTH / self.scrollview.frame.size.width;
    CGFloat scale2 = IMAGE_HEIGHT / self.scrollview.frame.size.height;
    [self.scrollview setZoomScale:MAX(scale1, scale2) animated:NO];
    [self.scrollView scrollRectToVisible:CGRectMake(0,0,0,0) animated:NO];
    

    【讨论】:

    • 我没有在问题中包含animated,因为它在这里不重要。但无论如何我都可以正常工作 - 请参阅上面的 cmets!
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2013-11-05
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    相关资源
    最近更新 更多