2011-04-24 53 views
7

我可以達到同樣爲以下幾點:只使用IBUIView的背景圖案

view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]]; 

?無需編寫這樣的代碼行? 似乎IB只允許設置純色,而不是圖像作爲背景。

+1

當您需要自定義UI時,IB非常有限。我儘量不要使用IB,這樣我就可以爲用戶創建更美觀,更具體的佈局和交互。 – 2011-04-24 00:41:31

+2

@Edmar不好的建議。在IB中儘可能多地做。它不能讓你一路走來,但它可以幫助你擺脫束縛,讓你可以專注於用戶更美觀和更具體的佈局/交互。 – 2011-04-24 00:58:48

回答

6

Interface Builder不允許使用背景圖案。但是,您可以簡單地在UIImageView中使用適當的圖像覆蓋背景。這將給應用程序提供所需的外觀,而不必使用上面發佈的代碼。

但是,我堅決不同意你應該只使用Interface Builder。代碼在我眼中更清潔,並允許更多地控制你的構建。

+3

模式將是首選的方法,特別是如果它確實是一種模式。幀緩衝區只需緩存一個磁貼即可重複使用,因此您將消耗更少的內存。另外,通過UIImageView,您還有額外的視圖對象的開銷。 – 2011-04-24 02:10:37

+0

同意。就像我說的,我不同意他應該只使用IB。我認爲通過代碼來實現它會更順利。 – 2011-04-24 02:12:12

+1

@theOrkus不一定。在IB中保持儘可能多的創建一個更清晰的MVC實現。你的觀點與控制器是分開的,不同的。當使用IB定位元素時尤其如此。你的控制器爲什麼要關心這些細節?在IB中執行儘可能多的操作,以便您的控制器可以專注於業務邏輯。 – 2011-04-24 02:16:07

2

這不能在IB完成,但得到了正確的代碼。儘管其他人評論過,但儘可能使用IB,這樣您可以將精力集中在應用程序的真實業務邏輯上,只需定製IB不能達到的地方。祝你好運!

0

正如其他人所說,你不能僅在IB/storyboard中完成此操作。但用@IBDesignable你可以添加幾行到你的子類,並讓它在IB顯示,這是非常酷。

import UIKit 

@IBDesignable 
class MyView: UIView { 
override func awakeFromNib() { 
    super.awakeFromNib() 
    self.addPattern() 
} 

override func prepareForInterfaceBuilder() { 
    self.addPattern() 
} 

private func addPattern() { 
    let image = UIImage(named: "MyPattern", in: Bundle(for: self.dynamicType), compatibleWith: nil) 
    self.backgroundColor = UIColor(patternImage: image!) 
} 

} 

然後,只需將您的故事板/ IB視圖的類更改爲MyView。