我可以達到同樣爲以下幾點:只使用IBUIView的背景圖案
view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]];
?無需編寫這樣的代碼行? 似乎IB只允許設置純色,而不是圖像作爲背景。
我可以達到同樣爲以下幾點:只使用IBUIView的背景圖案
view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]];
?無需編寫這樣的代碼行? 似乎IB只允許設置純色,而不是圖像作爲背景。
Interface Builder不允許使用背景圖案。但是,您可以簡單地在UIImageView中使用適當的圖像覆蓋背景。這將給應用程序提供所需的外觀,而不必使用上面發佈的代碼。
但是,我堅決不同意你應該只使用Interface Builder。代碼在我眼中更清潔,並允許更多地控制你的構建。
模式將是首選的方法,特別是如果它確實是一種模式。幀緩衝區只需緩存一個磁貼即可重複使用,因此您將消耗更少的內存。另外,通過UIImageView,您還有額外的視圖對象的開銷。 – 2011-04-24 02:10:37
同意。就像我說的,我不同意他應該只使用IB。我認爲通過代碼來實現它會更順利。 – 2011-04-24 02:12:12
@theOrkus不一定。在IB中保持儘可能多的創建一個更清晰的MVC實現。你的觀點與控制器是分開的,不同的。當使用IB定位元素時尤其如此。你的控制器爲什麼要關心這些細節?在IB中執行儘可能多的操作,以便您的控制器可以專注於業務邏輯。 – 2011-04-24 02:16:07
這不能在IB完成,但得到了正確的代碼。儘管其他人評論過,但儘可能使用IB,這樣您可以將精力集中在應用程序的真實業務邏輯上,只需定製IB不能達到的地方。祝你好運!
正如其他人所說,你不能僅在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。
當您需要自定義UI時,IB非常有限。我儘量不要使用IB,這樣我就可以爲用戶創建更美觀,更具體的佈局和交互。 – 2011-04-24 00:41:31
@Edmar不好的建議。在IB中儘可能多地做。它不能讓你一路走來,但它可以幫助你擺脫束縛,讓你可以專注於用戶更美觀和更具體的佈局/交互。 – 2011-04-24 00:58:48