1. initWithFrame方法是什么锄贷?
initWithFrame方法用來(lái)初始化并返回一個(gè)新的視圖對(duì)象,根據(jù)指定的CGRect(尺寸)揽惹。
當(dāng)然秋忙,其他UI對(duì)象盔沫,也有initWithFrame方法医咨,但是,我們以UIView為例架诞,來(lái)搞清楚initWithFrame方法拟淮。
2.什么時(shí)候用initWithFrame方法?
簡(jiǎn)單的說(shuō)谴忧,我們用編程方式申明很泊,創(chuàng)建UIView對(duì)象時(shí),使用initWithFrame方法沾谓。
在此委造,我們必須搞清楚,兩種方式來(lái)進(jìn)行初始化UIView均驶。
1.使用 Interface Builder 方式昏兆。
這種方式,就是使用nib文件妇穴。通常我們說(shuō)的“拖控件” 的方式爬虱。
實(shí)際編程中隶债,我們?nèi)绻肐nterface Builder 方式創(chuàng)建了UIView對(duì)象。(也就是跑筝,用拖控件的方式)
那么死讹,initWithFrame方法方法是不會(huì)被調(diào)用的。因?yàn)閚ib文件已經(jīng)知道如何初始化該View曲梗。(因?yàn)樵蘧覀冊(cè)谕显搗iew的時(shí)候,就定義好了長(zhǎng)稀并、寬仅颇、背景等屬性)。
這時(shí)候碘举,會(huì)調(diào)用initWithCoder方法忘瓦,我們可以用initWithCoder方法來(lái)重新定義我們?cè)趎ib中已經(jīng)設(shè)置的各項(xiàng)屬性。
2.使用編程方式引颈。
就是我們聲明一個(gè)UIView的子類耕皮,進(jìn)行“手工”編寫代碼的方式。
實(shí)際編程中蝙场,我們使用編程方式下凌停,來(lái)創(chuàng)建一個(gè)UIView或者創(chuàng)建UIView的子類。這時(shí)候售滤,將調(diào)用initWithFrame方法罚拟,來(lái)實(shí)例化UIView。
特別注意完箩,如果在子類中重載initWithFrame方法赐俗,必須先調(diào)用父類的initWithFrame方法。在對(duì)自定義的UIView子類進(jìn)行初始化操作弊知。
比如:
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];// 先調(diào)用父類的initWithFrame方法
if (self) {
// 再自定義該類(UIView子類)的初始化操作阻逮。
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
[_scrollView setFrame:CGRectMake(0, 0, 320, 480)];
_scrollView.contentSize = CGSizeMake(320*3, 480);
[self addSubview:_scrollView];
}
return self;
}
在這里,我想秩彤,應(yīng)該對(duì)initWithFrame方法略知一二了叔扼。
那么,用Interface Builder 方式創(chuàng)建的nib文件是什么漫雷?
對(duì)于應(yīng)用程序瓜富,資源是一種數(shù)據(jù)文件,伴隨可程序執(zhí)行程序的一種數(shù)據(jù)文件珊拼。(可以理解為可執(zhí)行程序的食呻,一種不可缺少的組陳部分)。
資源文件,是一種可移動(dòng)的仅胞,由適合的工具編寫的一種特殊的代碼每辟。
如:plish文件,txt文件干旧,圖像渠欺,視頻等文件。都可以被Xcode識(shí)別和引用椎眯。一個(gè)應(yīng)用程序可以包含多種形式的資源文件挠将。當(dāng)然,nib文件也不例外编整,僅僅是一種資源文件舔稀。通過(guò)Interface Builder 方式,可以創(chuàng)建nib文件掌测,存儲(chǔ)應(yīng)用程序的UI對(duì)象内贮。供應(yīng)用程序來(lái)讀取。