2013-03-25 70 views
0

更改UIView的框架時,您有兩個選項。第一種方法是將CGRect作爲參數傳遞給視圖的setFrame函數。另一種方法是設置view.frame等於CGRect如何檢測類的屬性何時更改

1) [view setFrame:frame]; 
2) view.frame = frame; 

當使用UIViewsetFrame功能,很容易使視圖以檢測它應該改變其幀。但是,只需更改屬性(view.frame),視圖如何檢測其幀已更改爲(因爲視圖的幀會立即更新)?

+5

'view.frame'和'setFrame:'是一樣的東西。 'view.frame = frame'被轉換爲'[view setFrame:frame]'。 – Espresso 2013-03-25 03:55:42

+2

在等號的左側使用屬性訪問器只是用於調用setter的點符號,即setFrame :.你的2個「選項」是相同的。 – rdelmar 2013-03-25 03:55:47

回答

4

這就是所謂的其附帶的Objective-C 2.0點符號。他們主要用於獲取和設置屬性。

獲取房產:view.frame。設置屬性:view.frame = frame

但他們只是另一種方式或更簡單的方式(syntactic sugar)寫:[view frame][view setFrame:frame]

就是這樣,他們只是翻譯成普通的舊Objective-C消息。事實上,因爲他們只是翻譯的消息,你可以試試:

view.setNeedsDisplay; 

注意setNeedsDisplay不是實際的屬性,但因爲它是翻譯成[view setNeedsDisplay],很有效!按照慣例,點符號僅用於獲取和設置屬性,所以我不建議使用類似view.setNeedsDisplay的東西。

+0

用於推薦**對**使用非語言消息發送的點語法。 – 2013-03-25 04:45:04

4

view.frame = frame等於[view setFrame:frame]。使用點方法設置屬性與使用setXXX:XXX相同。您可以將NSLog放入setXXX:,然後致電obj.XXX = XXX;並檢查控制檯以查看是否打印了NSLog

例子: -

view.frame = frame; //If you set frame like this then 

-(void)setFrame:(CGRect)frame 
{ 
    //this will be call 
} 
+0

確切地說,最簡單的方法知道那個...好例子+1 – TheTiger 2013-03-25 04:48:28

相關問題