iOS - UIScrollView 可以滚动但不能缩放 [英] iOS - UIScrollView can scroll but cannot zoom

查看:39
本文介绍了iOS - UIScrollView 可以滚动但不能缩放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想放大/缩小包含 UIImageViewUIScrollView.使用下面的代码,我只能滚动滚动视图内容,但无法缩放.

I want to zoom in/out UIScrollView that contains a UIImageView. With my code below I am only able to scroll the scroll view contents but cannot zoom it.

我的视图层次结构如下所示:

My view hierarchy looks like this:

- (UIView *) containerView
-- (UIView *) contentView
--- (UIScrollView *) scrollView
---- (UIImageView *) self.imageView

代码:

UIView *previousContentView = nil;

        for (NSInteger i = 0; i < 2; i++) {
            contentView = [self addRandomColoredView];
            [containerView addSubview:contentView];
            [containerView.topAnchor constraintEqualToAnchor:contentView.topAnchor].active = true;
            [containerView.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor].active = true;

            scrollView = [self addRandomScrollView];
            [contentView addSubview:scrollView];

            self.imageView = [[UIImageView alloc] init];
            [self.imageView setImage:[imagesArray objectAtIndex:i]];
            [self.imageView setTranslatesAutoresizingMaskIntoConstraints:false];
            [scrollView addSubview:self.imageView];

            if (previousContentView) {
                [VerticalSeparatorView addSeparatorBetweenView:previousContentView secondView:contentView];
                NSLayoutConstraint *width = [contentView.widthAnchor constraintEqualToAnchor:previousContentView.widthAnchor];
                width.priority = 250;
                width.active = true;
            } else {
                [containerView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor].active = true;
            }

            [contentView.topAnchor constraintEqualToAnchor:scrollView.topAnchor].active = true;
            [contentView.bottomAnchor constraintEqualToAnchor:scrollView.bottomAnchor].active = true;
            [contentView.leadingAnchor constraintEqualToAnchor:scrollView.leadingAnchor].active = true;
            [contentView.trailingAnchor constraintEqualToAnchor:scrollView.trailingAnchor].active = true;

            [scrollView.topAnchor constraintEqualToAnchor:self.imageView.topAnchor].active = true;
            [scrollView.bottomAnchor constraintEqualToAnchor:self.imageView.bottomAnchor].active = true;
            [scrollView.leadingAnchor constraintEqualToAnchor:self.imageView.leadingAnchor].active = true;
            [scrollView.trailingAnchor constraintEqualToAnchor:self.imageView.trailingAnchor].active = true;

            previousContentView = contentView;
        }
        [containerView.trailingAnchor constraintEqualToAnchor:previousContentView.trailingAnchor].active = true;

- (UIView *)addRandomColoredView
{
    UIView *someView = [[UIView alloc] init];
    someView.translatesAutoresizingMaskIntoConstraints = false;
    [someView setBackgroundColor:[UIColor blackColor]];
    return someView;
}

-(UIScrollView *)addRandomScrollView
{
    UIScrollView *scrollView = [[UIScrollView alloc] init];
    [scrollView setDelegate:self];
    [scrollView setTranslatesAutoresizingMaskIntoConstraints:false];
    [scrollView setBackgroundColor:[UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]];
    [scrollView setMaximumZoomScale:2.5f];
    [scrollView setMinimumZoomScale:0.5f];
    [scrollView setZoomScale:scrollView.minimumZoomScale];
    return scrollView;
}

#pragma mark - UIScrollViewDelegate
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}

我相信 scrollView 正在获取它的 contentSize 因为它正在显示图像并且我可以滚动.为什么我不能放大或缩小?

I believe the scrollView is getting its contentSize because it is showing the image and I can scroll. Why can't I zoom in or zoom out?

推荐答案

你必须为你的滚动视图指定一个委托,然后实现 viewForZoomingInScrollView 来告诉它缩放图像视图:

You have to specify a delegate for your scroll view, and then implement viewForZoomingInScrollView to tell it to zoom the image view:

- (UIView *)addScrollViewWithImageView {
    UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.translatesAutoresizingMaskIntoConstraints = false;
    scrollView.maximumZoomScale = 200.0;
    scrollView.minimumZoomScale = 0.1;
    scrollView.delegate = self;

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
    imageView.translatesAutoresizingMaskIntoConstraints = false;

    [self.view addSubview:scrollView];

    [scrollView addSubview:imageView];

    [NSLayoutConstraint activateConstraints:@[
        [imageView.topAnchor    constraintEqualToAnchor:scrollView.topAnchor],
        [imageView.leftAnchor   constraintEqualToAnchor:scrollView.leftAnchor],
        [imageView.rightAnchor  constraintEqualToAnchor:scrollView.rightAnchor],
        [imageView.bottomAnchor constraintEqualToAnchor:scrollView.bottomAnchor]
    ]];

    return scrollView;
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return scrollView.subviews.firstObject;
}

然后用图像视图填充这些可缩放的滚动视图,您的 viewDidLoad 可能如下所示:

And then to populate these zoomable scroll views with image views, your viewDidLoad might look like:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *previousContentView = nil;

    for (NSInteger i = 0; i < 3; i++) {
        UIView *contentView = [self addScrollViewWithImageView];
        [self.view.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor].active = true;
        [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor].active = true;
        if (previousContentView) {
            [HorizontalSeparatorView addSeparatorBetweenView:previousContentView secondView:contentView];
            NSLayoutConstraint *height = [contentView.heightAnchor constraintEqualToAnchor:previousContentView.heightAnchor];
            height.priority = 250;
            height.active = true;
        } else {
            [self.view.topAnchor constraintEqualToAnchor:contentView.topAnchor].active = true;
        }
        previousContentView = contentView;
    }
    [self.view.bottomAnchor constraintEqualToAnchor:previousContentView.bottomAnchor].active = true;
}

这篇关于iOS - UIScrollView 可以滚动但不能缩放的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆