如何使用嵌套的 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?