缩小放置在UIScrollView中的UIImageView

时间:2014-02-24 13:41:41

标签: ios iphone uiscrollview uiimageview scale

在Xcode 5中,我创建了a universal appUIScrollView包含UIImageView(此处fullscreen):

Xcode screenshot

由于我在界面生成器中设置了所有UI属性(要显示的图像,UIImageView尺寸为1000 x 1000像素,UIImageView模式设置为“缩放到填充”) ,ViewController.m中的实际源代码非常简短:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    /*
    if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {
        _imageView.frame = CGRectMake(_imageView.frame.origin.x,
                                      _imageView.frame.origin.y,
                                      800, 800);
    }
    */

    _scrollView.contentSize = _imageView.bounds.size;

    NSLog(@"%s: _scrollView %@ %@",
          __PRETTY_FUNCTION__,
          NSStringFromCGPoint(_scrollView.frame.origin),
          NSStringFromCGSize(_scrollView.frame.size));

    NSLog(@"%s: _imageView %@ %@",
          __PRETTY_FUNCTION__,
          NSStringFromCGPoint(_imageView.frame.origin),
          NSStringFromCGSize(_imageView.frame.size));
}

这在iPhone和iPad上的效果令人惊讶(对我来说是iOS新手) - 应用程序甚至可以旋转。

然而,为iPhone显示的图像有点太大,需要按比例缩小才能更舒适地播放:

app screenshot

我希望,由于UIImageView模式是“缩放到填充”,我只需要更改其frame(或bounds?我已尝试过两种方式) - 如上面显示的注释代码。

但这不起作用 - 滚动中断(无法再滚动到图像底部)。

请问任何建议?

(我也希望稍后添加一个双击和双击手势识别器 - 并在其中缩放UIImageView

更新

我已尝试通过将以下代码添加到viewDidLayoutSubviews来关注Andrei的建议(谢谢!),但图片没有按比例缩小:

if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {
    _scrollView.maximumZoomScale = 1.2;
    _scrollView.minimumZoomScale = .8;
    _scrollView.zoomScale = .8;
}

2 个答案:

答案 0 :(得分:1)

UIScrollView可以为您进行缩放以及捏合手势。

您只需在“minimumZoomScale”和“maximumZoomScale”属性中设置正确的值,它就会让用户在这些限制之间捏合。 您还需要实现

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
来自UIScrollViewDelegate的

方法。它应该只返回imageView。

您还可以使用“zoomScale”属性设置缩放级别。

对于双击,您需要将自己的双击手势识别器添加到滚动视图,并在双击时增加缩放级别。

使用委托方法和双击手势更新

答案 1 :(得分:1)

您一定要阅读 AutoLayout 。如果打开AutoLayout,则无法更改边框和边界。您当然可以将其关闭整个故事板。

问题的解决方案是约束。使用它们可以定义视图的相关方式,例如:UIScrollView与其父视图的关系以及{{1}的方式}与您的UIImageView

相关

详细了解以下链接的约束:

虽然UIScrollView可以通过捏合来处理缩放,但您必须实现正确的委托方法:UIScrollView。当然,您必须为viewForZoomingInScrollView:minimumZoomScale设置正确的属性值。

有关以下链接的更多信息:

两个网站都有足够的信息和示例供您使用。首先尝试在这些网站上提供的代码,然后发布另一个更具体的问题,如果您遇到问题。