2011-04-27 40 views
0

這是我發現的一個相關問題,但它沒有詳細回答我的問題。我可以爲每個viewController有多個視圖嗎?

[http://stackoverflow.com/questions/3209993/cocoa-touch-can-i-have-multiple-views-per-view-controller-or-specify-bounds-of][1]

我有一個UIView類,BallView,它被設置爲ballViewController的默認視圖。現在,這個視圖有一個根據加速度計彈跳的球。每次加速度計發送更新時,我都會調用私人函數draw

但是,我的主要問題是:我想有多個這樣的球彈跳。

我是否需要爲每個班級重新創建視圖?但是,文件所有者的IBOutlet view也必須連接。一個IBOutlet可以指向一個地址。

任何其他方式?

這裏是我如何實例化Ball View類的ballViewController:

[motionManager startAccelerometerUpdatesToQueue:queue withHandler: 
^(CMAccelerometerData *accelerometerData, NSError *error){ 
    [(BallView *)self.view setAcceleration:accelerometerData.acceleration]; 
    [(BallView *)self.view performSelectorOnMainThread:@selector(draw) withObject:nil waitUntilDone:NO]; 
}]; 

因此,這意味着,我的問題是從那些多視圖標籤欄的解決方案有些不同。因爲在這些情況下,一次只顯示1個視圖。我希望4-5個視圖重疊在一起。

任何幫助?

回答

4

你是對的,你的視圖控制器在其view屬性中只能有一個UIView。儘管這個觀點當然可以用來包含其他子視圖。

我會做的是有一個普通的舊UIView作爲您的控制器的view,並且您的BallViews是該視圖的子視圖。您的控制器仍然可以控制這些視圖,但它們不能全部位於其view屬性中。

編輯:如果您使用筆尖文件/ Interface Builder中,加入BallView作爲控制器的視圖的子視圖是很容易 - 只需將一個UIView對象到視圖,並在身份檢查,您可以更改視圖的身份到您的BallView類。

如果你不使用IB,你也可以做同樣的編程:

// BallViewController.h 
@interface BallViewController 
{ 
    BallView* ballView; 
} 

@end 

// BallViewController.m 
@implementation BallViewController 

- (void) loadView 
{ 
    ... 

    CGRect frame1 = ... 
    CGRect frame2 = ... 

    self.view = [[UIView alloc] initWithFrame:frame1]; 

    ballView = [[BallView alloc] initWithFrame:frame2] retain]; 
    [self.view addSubview:ballView]; 

    ... 
} 

@end 
+0

嗨的Mac,所以..當我想的viewController的觀點,我做'self.view'。我需要做些什麼才能獲得子視圖? – 2011-04-27 12:20:02

+0

@Hrishikesh:我已經爲你添加了一些示例代碼。希望能回答你的一些問題。對不起,我手邊沒有XCode/Interface Builder,所以我的描述可能不是100%準確的(我只是從內存中工作)。 – Mac 2011-04-27 12:34:16

相關問題