2011-05-28 33 views
1

我正在开发一个iPad应用程序,允许用户选择“小部件”以显示在屏幕上。屏幕分为两列,小部件将放置在左侧或右侧列中。每个小部件都是一个视图控制器,具有固定宽度的静态但取决于小部件内容的高度不同。我正在寻找一种方法将窗口小部件放置在屏幕上,以便它们自动放置在下一个逻辑位置 - 类似于Java中的布局管理器。自动将视图置于下一个逻辑位置(如布局管理器)

我创建了方法addWidget,它跟踪每列中所有小部件的高度。然后将小部件添加到最小高度的列中。这作品,但我正在寻找一个更优雅的方式来做到这一点,或想法改善目前的解决方案。

- (void) addWidget:(UIViewController *)controller { 

    if(leftHeight <= rightHeight) { 
     controller.view.frame = CGRectMake(20.0, leftHeight, controller.view.bounds.size.width, controller.view.bounds.size.height); 
     leftHeight = leftHeight + controller.view.bounds.size.height + 20; 
    } 

    else { 
     controller.view.frame = CGRectMake(self.view.bounds.size.width-controller.view.bounds.size.width-20, rightHeight, controller.view.bounds.size.width, controller.view.bounds.size.height); 
     rightHeight = rightHeight + controller.view.bounds.size.height + 20; 
    } 

    [scrollView addSubview:controller.view]; 
} 

感谢

回答

1

如果您在为您的小部件提供“跳板”式视图之后,我建议您查看Three20框架。

它提供了一个[TTLauncherView][2]类,它实现了您正在寻找的内容,包括分页,图标重新排序以及删除时的摇动效果 - 就像真正的Springboard一样。一旦你了解了Three20的一些信息,它很容易使用。

顺便说一句,它是官方的Facebook应用程序使用一个...

如果你不想使用Three20,你可以简单地看一下实施,使你的心。

1

我认为这可能有两个UITableView的对象,每列一个工作。当你添加一个新的控件时,你仍然需要做数学运算来决定它将进入哪一列,但是你应该有一个更容易的垂直布局单元的时间,因为表视图可以做到这一点。如果您当前正在将两个列一起滚动,则需要监视每个表视图滚动并以编程方式更新另一个列。