如何将平移手势从滚动视图转发到另一个滚动视图

Posted

技术标签:

【中文标题】如何将平移手势从滚动视图转发到另一个滚动视图【英文标题】:How-To forward pan gesture from a scrollview to another scrollview 【发布时间】:2013-03-14 11:39:04 【问题描述】:

我有两个 UIScrollView,如果用户在滚动视图中滚动,我想让另一个滚动视图也滚动。我已经阅读了一个解决方案,该解决方案涉及将 pangesturerecognizer 从最初平移的滚动视图传递到另一个滚动视图,但如果我这样做,原始滚动视图根本不会滚动。

我发现,有一个委托方法

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

但是如果我尝试连接滚动视图的 pangesturerecognizers 的委托,我的应用程序就会崩溃。

希望有人可以帮助我。

【问题讨论】:

【参考方案1】:

你只需要更新第二个ScrollView的Bounds

类似:-

CGRect updateTheViewWithBounds = viewToUpdate.bounds;
updateTheViewWithBounds.origin = scrolledView.contentOffset;
viewToUpdate.bounds = updateTheViewWithBounds;

这样就可以了。

从 cmets 看,我举一个小例子。

在UiViewController上创建两个scrollView

scrollOne = [[UIScrollView alloc] init];
    [scrollOne setBackgroundColor:[UIColor greenColor]];
    [scrollOne setFrame:CGRectMake(10, 20, 200, 300)];
    [scrollOne setContentSize:CGSizeMake(600, 600)];
    scrollOne.delegate = self;

    scrollTwo = [[UIScrollView alloc] init];
    [scrollTwo setBackgroundColor:[UIColor redColor]];
    [scrollTwo setFrame:CGRectMake(230, 20, 200, 300)];
    [scrollTwo setContentSize:CGSizeMake(600, 600)];
    scrollTwo.delegate = self;


    [self.view addSubview:scrollOne];
    [self.view addSubview:scrollTwo];

符合 UIScrollView Delegates 并实现相同。

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    if([scrollView isEqual:scrollOne])
    
        CGRect updateTheViewWithBounds = scrollOne.bounds;
        updateTheViewWithBounds.origin = scrollOne.contentOffset;
        scrollTwo.bounds = updateTheViewWithBounds;
        [scrollTwo flashScrollIndicators];
    
    else if([scrollView isEqual:scrollTwo])
    
        CGRect updateTheViewWithBounds = scrollTwo.bounds;
        updateTheViewWithBounds.origin = scrollTwo.contentOffset;
        scrollOne.bounds = updateTheViewWithBounds;
        [scrollOne flashScrollIndicators];
    

滚动上述任何一个scrollView都会同时滚动scrollView。

【讨论】:

只有当一个滚动视图没有滚动时才有效,对吗? :( 每当第一个scrollview发生变化时,在delegate中,更新对应的其他scrollView 什么意思?你的意思是 scrollView:DidScroll 委托方法吗?你知道我如何使用这种方法并且仍然能够让滚动视图以不同的速度滚动吗? @roronoazorro 如果我真的只想滚动一个视图怎么办..检查this问题

以上是关于如何将平移手势从滚动视图转发到另一个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 子视图在缩放后无法识别平移手势

ImageView panGesture 取消 UISCrollVIew 滚动功能

是否可以在按钮上启动滚动视图平移手势

基于平移手势翻译的滚动scrollview

如何将触摸事件从一个视图传递到另一个视图

滚动视图中基于平移手势的移动视图控制器