2012-01-06 63 views
1

我發現自己這個做了很多:有沒有更簡單的方法來移動iOS中的UI元素?

webView.frame = CGRectMake(webView.frame.origin.x, otherView.frame.origin.y + otherView.frame.size.height + 10, webView.frame.size.width, webView.frame.size.height); 

顯然很多這樣的代碼的重複。我只是移動元素,但我不得不創建一個新的CGRect,因爲我無法直接訪問屬性。

有沒有更簡單的方法來移動我在運行時丟失的元素?

回答

4

並不是一個完全不同的方式,但如果你問我一個更舒適的一個:

 
CGRect newRect = webView.frame; 
newRect.origin.y = otherView.frame.size.height+10; 
webView.frame = newRect; 

我覺得這是方式更具有可讀性爲好。在這個特定的例子中,它少了大約40%的字符! :p

0

@wasabii就減少代碼量而言有正確的答案,但另一種考慮的方法是在UIView上創建一個類別。以下是一些有關類別的文檔:http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

基本上,一個類別允許您向不控制的類(甚至是您控制的類)添加功能。

Xcode 4.2提供了一個用於在新文件對話框下創建類別的模板,因此如果可以的話,請使用該模板。

在這種情況下,你可能會創建的UIView類別與一種稱爲

-(void)moveDownByIncrement:(float)increment 

然後實現移動代碼,只要你喜歡(但真正使用@ wasabii的方法)。

有幾件事情要記住約類別:

  1. 它們影響的類本身,所以當你添加一個方法到一個類別是可用的應用廣泛。
  2. 如果您尚未導入類別標題(將其導入到課堂或預處理中),則嘗試調用類別方法時會出現錯誤(或警告,具體取決於您的項目設置)。
  3. 類別是使用可能導致衝突的名稱空間定義的。避免這種情況的最好方法是將所添加的任何方法(以及類別名稱本身)與項目特定的前綴相加。許多第三方庫和開源項目在NSData上使用一個名爲 - (NSString *)base64EncodedString的類別,因此您可以省去頭痛,並將該方法作爲您自己類別的前綴。
  4. 在一個類別上設置屬性或ivars是最好的麻煩,值得討論它自己。如果你不知道該怎麼做,那就別試試了!
2
view.frame = CGRectOffset(view.frame, 5, 10); 
相關問題