如何使用嵌套的 UIImageViews 实现两个单独的 UIScrollViews...只有一个正在缩放

Posted

技术标签:

【中文标题】如何使用嵌套的 UIImageViews 实现两个单独的 UIScrollViews...只有一个正在缩放【英文标题】:How to implement two separate UIScrollViews with nested UIImageViews...only one is zooming 【发布时间】:2011-03-05 00:26:19 【问题描述】:

好的,我整天都在努力解决这个问题,而且我已经非常接近了。我正在尝试创建一种方法来查看多个允许缩放图像的 scrollView/imageView 嵌套对。

当视图加载时,只有一个滚动视图占据了整个屏幕,但是当按下按钮时,我将第一个滚动视图的宽度减半,并取消隐藏另一个(其中有一个嵌套的 imageView以及)就在它旁边。所以有一个拆分视图效果,理想情况下,用户将能够分别捏合和缩放每张图像。

所以除了单独的捏合和缩放部分之外,我已经完成了所有工作。无论我在屏幕上的哪个位置捏,只有第一个 scrollView 会缩放。所以即使我正在触摸另一个滚动视图,它仍然只影响第一个。

我在 IB 中设置它们,然后以这种方式在 viewDidLoad 中设置它们:

[scrollView setBackgroundColor:[UIColor blackColor]];
[scrollView setCanCancelContentTouches:NO];
scrollView.clipsToBounds = YES;    // default is NO, we want to restrict drawing within our scrollview
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

scrollView.minimumZoomScale = 1;
scrollView.maximumZoomScale = 5;
scrollView.delegate = self;
[scrollView setScrollEnabled:YES];

imageView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"monitor.JPG"]];

[scrollView addSubview:imageView3];
//[scrollView setFrame:CGRectMake(0, 0, 1024, 660)];


[scrollView1 setBackgroundColor:[UIColor blackColor]];
[scrollView1 setCanCancelContentTouches:NO];
scrollView1.clipsToBounds = YES;    // default is NO, we want to restrict drawing within our scrollview
scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite;

scrollView1.minimumZoomScale = 1;
scrollView1.maximumZoomScale = 5;
scrollView1.delegate = self;
[scrollView1 setScrollEnabled:YES];

imageView31 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"monitor.JPG"]];

[scrollView1 addSubview:imageView31];

然后我隐藏和取消隐藏不同的滚动视图(我有 40 个,具体取决于工具栏上的 segmentedControl 索引。我的方向是否正确?是否可以有两个可单独访问的滚动视图?

任何帮助将不胜感激。

谢谢!

编辑:

好的,所以我浏览并更新了 clipToBunds 位...呵呵。它确实使它看起来更好,但仍然没有解决问题。这是我根据所选索引调用的代码:

-(void) pickedOne


if(segment.selectedSegmentIndex == 0)

    [scrollView setFrame:CGRectMake(0, 0, 1024, 660)];
    [scrollView setContentSize:CGSizeMake(1024, 660)];
    scrollView.hidden = NO;

    scrollView1.hidden = YES;
    scrollView2.hidden = YES;
    scrollView3.hidden = YES;

else if(segment.selectedSegmentIndex == 1)

    [scrollView setFrame:CGRectMake(0, 0, 512, 660)];
    scrollView.zoomScale = 1.0;
    scrollView.hidden = NO;


    [scrollView1 setFrame:CGRectMake(512, 0, 512, 660)];
    scrollView1.zoomScale = 1.0;
    scrollView1.hidden = NO;

            scrollView2.hidden = YES;
            scrollView3.hidden = YES;


这种方法有什么大问题吗?

如果我在右边的 scrollView 上捏缩放,它会使滚动视图更大,(但不会增加 scrollView2 图像的大小)但是当你在其中任意一个内捏时它确实会增加第一个 scrollView 图像的大小滚动视图...奇怪

【问题讨论】:

【参考方案1】:
scrollView.clipsToBounds = NO;    // default is NO, we want to restrict drawing within our scrollview

这不是你想要的相反吗?将其设置为 YES 会将绘图限制在滚动视图内。

在我看来,您并没有调整滚动视图的大小。您是在调整其内容的大小还是其中的图像视图?可以贴一下点击按钮时调用的代码吗?

【讨论】:

您好,感谢您的回答,我发布了带有代码的编辑。请注意,在最底部,我能够清楚地识别正在发生的确切行为,就像它正在工作一半...... 可能您的视图层次结构混淆了。如果您在任何UIView 上调用recursiveDescription,它将返回其所有子视图的完整描述。尝试以这种方式记录您的***视图,以查看您是否意外将一个视图包含在另一个视图中。

以上是关于如何使用嵌套的 UIImageViews 实现两个单独的 UIScrollViews...只有一个正在缩放的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Imageview 实现切换行为,没有 UIButton

如何使用 IBOutletCollection 将多个 UIImageViews 连接到同一个插座?

如何使用 UIPanGestureRecognizer 移动 2 个或更多 UIImageViews

如何将多个 UIImageViews 添加到分页 UIScrollView?

如何修改 UIScrollView 中 UIImageViews 子视图的位置?

CAD在网页中如何实现嵌套打印?