iOS如何实现iPhone游戏中心应用程序中的抽屉?

时间:2013-01-29 17:53:58

标签: iphone uitableview uiscrollview game-center

我想实现一个像iPhone Game Center应用程序一样运行的抽屉。当您拉出UITableView然后提供我们已到达桌子的顶部时,此抽屉滑动显示更多内容。

我在这里尝试了一些解决方案,所有这些解决方案都很有效但我无法重新创建与Game Center示例相同的功能。我试图在UITableView中嵌入一个UIScrollView - 这个滚动视图顶部有一个视图,它可以播放抽屉角色,下面有一个tableView。我为我的大scrollView和tableView设置了UIScrollViewDelegate,并设法同步两者的contentOffsets。我已经为我的大scrollView禁用了滚动条,所以我只能从tableView中看到滚动条。

然后我尝试将tableView设置为整个视图的子视图并设置另一个视图 - 抽屉视图作为同一视图的子视图,并再次使用tableView的UIScrollViewDelegate来调整两个视图的帧

这两种解决方案都有用,但它不是我想要的。我认为这两个解决方案的最大缺陷是,当我拉出tableView以显示抽屉时,我可以清楚地看到我没有与我的tableView scrollView进行交互,因为在整个拖动过程中,scrollBars在同一位置保持在顶部。当抽屉完全展开后,我现在可以与tableView scrollView交互(tableView内容滚动和滚动条移动)

如果您查看附加图片,您可以看到在游戏中心应用程序滚动条在抽屉展开时正在移动。这就像抽屉是tableView的scrollView的一部分,但是当完全展开停止移动时,如果我继续拉这个tableView,我会在tableView和抽屉之间获得更多空间。如果你向上推动tableView以隐藏抽屉,则滚动条会下降。

我想实现一个像iPhone Game Center应用程序一样运行的抽屉。当您拉出UITableView然后提供我们已到达桌子的顶部时,此抽屉滑动显示更多内容。

我想在Game Center中复制这样的viewController。如果有人知道怎么做,请分享解决方案。

您可以在此处查看屏幕截图:

http://i.stack.imgur.com/O44IS.png

http://i.stack.imgur.com/qDf7v.png

由于

亚当

2 个答案:

答案 0 :(得分:1)

ViewController必须实现UIScrollViewDelegate,并且在scrollViewDidScroll方法中你必须进行一些计算。 下面的代码来自一个旧项目:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat scrollOffset = scrollView.contentOffset.y; // this is the important number.
    if (scrollOffset>=0 && scrollOffset<=topHeight) {
        CGRect frame = CGRectMake(0, scrollOffset/2, 320, topHeight - scrollOffset/2);
        photos.frame = frame;
    } else if (scrollOffset>topHeight) {
        CGRect frame = CGRectMake(0, 100, 320, 100);
        photos.frame = frame;
    } else {
        CGRect frame = CGRectMake(0, 0, 320, topHeight);
        photos.frame = frame;
    }
}

根据您的反馈,我认为最好的选择是这样的:

|----------------------|  
|        DRAWER        |  
|----------------------|  
|                      |  
|                      |  
|                      |  
|     UIScrollView     |  
|                      |  
|                      |  
|                      |  
|----------------------|  

scrollViewDidScroll内,根据偏移量更改抽屉的框架。

答案 1 :(得分:1)

我想我发现他们是如何在Game Center应用程序中完成的。我的解决方案工作原理相同,实现起来非常简单。

首先,我为UITableViewController子类添加了一个名为“blueView”的UIView属性,并对tableView属性进行了一些调整:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.blueView = [[UIView alloc] initWithFrame:CGRectMake(0.0, -100.0, 320.0, 100.0)];
    self.blueView.backgroundColor = [UIColor blueColor];

    [self.tableView addSubview:self.blueView];
    [self.tableView setContentInset:UIEdgeInsetsMake(100.0, 0.0, 0.0, 0.0)];
    [self.tableView setScrollIndicatorInsets:UIEdgeInsetsMake(100.0, 0.0, 0.0, 0.0)];

}

然后在- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法中,我根据scrollView.contentOffset.y调整视图,使其始终位于顶部。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{

    if (scrollView.contentOffset.y < -100) {
        self.blueView.frame = CGRectMake(0.0, scrollView.contentOffset.y, 320.0, 100.0);
    } else {
        self.blueView.frame = CGRectMake(0.0, -100.0, 320.0, 100.0);
    }
}

瞧!也许这会节省一些人的时间。