2011-02-02 54 views
1

我有一個遊戲應用程序(可可,而不是可可觸摸),我嘗試添加地圖元素。我的應用程序窗口被命名爲mainWin。我有一個名爲viewGameMap的mainWin子視圖,我在IB中添加了它。我有一個叫做room.h/room.m的類,它基本上將應用程序中產生的尺寸作爲房間的寬度和高度。Cocoa Objective-C添加子視圖

我可以這樣做:

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)]; 
[[mainWin contentView] addSubview:thisRoom]; 

但我真的想這樣子視圖添加到viewGameMap,我可以子視圖子視圖?在IB中,我注意到子視圖沒有contentView,所以我不知道如何將它放在那裏。

在一個相關的問題,這些房間的意見不會是永久性的,所以一旦我完成他們,我如何銷燬它們。

感謝

回答

1

首先,如果你在.h文件中聲明viewGameMap,就像這樣(用@property指令):

@property (nonatomic, retain) IBOutlet UIView *viewGameMap; 

甚至只是在實際的聲明,就像這樣:

IBOutlet UIView *viewGameMap; 

那麼你應該能夠將viewGameMap綁定到IB中適當的UIView。這會讓你直接訪問viewGameMap。第二,既然你使用alloc來實例化你的Room對象(n.b.,類Room應該是大寫的每個約定),你對它負責(你擁有它)。但是當你調用-addSubview :,那麼[mainWin contentView] 擁有這個房間。所以,你可以這樣做:

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)]; 
[viewGameMap addSubview:thisRoom]; 
[thisRoom release]; 

後來,當thisRoom從[孟文內容查看】去掉,它的引用計數會(除了一些其他參考)下降到零,這將最終得到釋放。