【问题标题】:How to implement a tabbed page control如何实现标签页控件
【发布时间】:2015-02-20 16:48:03
【问题描述】:

我想采用类似于 Beats Music 应用程序的选项卡式滑动页面控件,其中两个相关的滚动视图相互交互以浏览页面。在动画开始时,我在实际页面上向左滑动。当它滚动得非常快时,我实际上是在向上滚动标签。这类似于 iOS 7/8 的多任务应用切换器的工作方式。

我环顾四周,但找不到用户可以滚动两个滚动视图的示例。通常只有内容控制器会移动选项卡,就像在这个 repo 中一样:https://github.com/daria-kopaliani/DAPagesContainer

我对如何自己实现这一点有点迷茫。我不能只在一个容器上放置两个滚动视图,然后在两个滚动视图上实现scrollViewDidScroll,因为那样会创建一个循环。

有什么想法吗?

【问题讨论】:

  • 看起来像 2 个启用分页的滚动视图,当一个滚动时,触发另一个滚动
  • 我不明白你为什么认为它会造成循环。
  • @Segev,滚动顶部滚动视图应该滚动底部滚动视图,反之亦然。我的直觉是只听scrollViewDidScroll 中的滚动活动并相应地调整另一个滚动视图。但是,当调整另一个滚动视图时,将调用相同的委托方法,并且它将尝试滚动用户已经与之交互的滚动视图。有意义吗?
  • @SimonMcLoughlin 我不认为这很容易。见我上面的评论。
  • @djibouti33 是的,委托回调告诉你调用了哪个滚动视图。检查它是否是你移动的那个并忽略它

标签: ios objective-c iphone uiscrollview


【解决方案1】:

您可以设置 BOOL 或标签来识别用户正在拖动的滚动视图是谁,并通过这样做来控制另一个滚动视图,而无需来回循环。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.topScrollView.tag = 1;
    self.contentScrollView.tag = 2;
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    self.scrollViewInControler = scrollView.tag;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if(scrollView.tag == self.scrollViewInControler && scrollView.tag == 1)
    {
        //move contentScrollView accordingly
    }
    else //...

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
                  willDecelerate:(BOOL)decelerate
{
    self.scrollViewInControler = 0;
}

我确信有办法完善这一点,但这是主要思想。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2011-01-08
    • 2010-12-21
    相关资源
    最近更新 更多