【问题标题】:Two UIScrollViews, synchronous scrolling两个UIScrollView,同步滚动
【发布时间】:2012-05-06 23:46:09
【问题描述】:

我有两个 UIScrollView,它们在彼此之上。

                                        UIView
                                           |
                              --------------------------
                              |                        |
                         UIScrollView1            UIScrollView2

我希望它以下列方式工作。如果我滚动 UIScrollView2,UIScrollView1 也应该滚动相同的 contentOffset。它必须同步完成,因此不能使用scrollViewDidScroll。你们有什么想法,怎么做?

源代码

    _prContentGridView = [[PRContentGridView alloc] initWithFrame:frame];
    _prContentGridView.minimumZoomScale = 0.25;
    _prContentGridView.maximumZoomScale = 2.0;
    _prContentGridView.delegate = self;

    _prBackgroundGridView = [[PRBackgroundGridView alloc] initWithFrame:frame];

    [self addSubview:_prBackgroundGridView];
    [self addSubview:_prContentGridView];

委托方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (_prContentGridView.scrollEnabled == YES) {
        CGPoint p = CGPointMake(scrollView.contentOffset.x -   _prevousContentOffsetOfContentScrollView.x, scrollView.contentOffset.y - _prevousContentOffsetOfContentScrollView.y);
        [_prBackgroundGridView setContentOffset:p animated:YES];
    }
}

【问题讨论】:

  • 你真的尝试过使用scrollViewDidScroll吗?
  • 我当然试过了。委托方法调用太晚,UIScrollView1 停止到晚,在 UIScrollView2 之后几秒。
  • ???怎么能迟到?应该在滚动视图将其内容移动到新坐标之前调用它......如果它迟到了,某处出了问题......发布你的代码
  • 它们在什么意义上“相互叠加”?按原点的 y 属性还是按两个子视图但一个覆盖另一个或一个是另一个子视图?
  • @user1212112 听起来有点像你使用 scrollViewDidEndScrollingAnimation

标签: iphone ios cocoa-touch uiscrollview uikit


【解决方案1】:

使用 UIScrollViewDelegate 协议方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
  if (scrollView == UIScrollView1){
    UIScrollView2.contentOffset = scrollView.contentOffset;
  }else{
    UIScrollView1.contentOffset = scrollView.contentOffset;
  }
}

【讨论】:

  • 当两个 UIScrollView 的 contentSize 相同时有效,但是我的 UIScrollViews 有不同的 contentSize。我将修改并应用您的解决方案。谢谢。
  • 好的,我稍后看到您添加了带有编辑的新代码...不客气
  • 似乎使用[UIScrollview setContentOffset:animated:] 会导致第二个滚动视图落后于被触摸的那个。如果您使用[UIView animateWithDuration:animations:] 并设置.contentOffset 属性,它会更加流畅。 (Reference answer.)
  • @pawelropa 你能告诉我你的修改代码吗?你如何管理同样包含两个滚动视图的大小
【解决方案2】:

你应该试试这个代码, 首先在.h文件中声明IBOutlet,

IBOutlet UIScrollView *FirstScrollView;
IBOutlet UIScrollView *SecondScrollView;

然后试试这段代码,

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
  if ([scrollView isEqual: FirstScrollView])
  {
            SecondScrollView.contentOffset =
              CGPointMake(FirstScrollView.contentOffset.x, 0);
  }
  else
  {
            FirstScrollView.contentOffset = 
              CGPointMake(SecondScrollView.contentOffset.x, 0);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多