2011-05-28 21 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的對象,每列一個工作。當你添加一個新的控件時,你仍然需要做數學運算來決定它將進入哪一列,但是你應該有一個更容易的垂直佈局單元的時間,因爲表視圖可以做到這一點。如果您當前正在將兩個列一起滾動,則需要監視每個表視圖滾動並以編程方式更新另一個列。