應該從drawRect()
或layoutSubviews()
調用CAShapeLayers圖紙嗎?自定義UIView繪圖與layoutSubviews vs drawRect
根據蘋果有關UIViews的文檔,繪圖操作應該放在drawRect()
。
然而,凱文卡特的WWDC會議中並不是這種情況:What's New in Interface Builder(他演示了在Interface Builder中可訪問的構建自定義UIView的過程)。
在他的演示中,他執行layoutSubviews
中的視圖繪製,而不是drawRect
。
他的解釋是:
如果我要實現的drawRect,這不會讓我們的最佳表現;而使用子層和子視圖將會使我們獲得非常好的表現。
從我迄今爲止在StackOverflow上讀到的內容來看,重寫drawRect()
方法可能會導致性能下降。這部分歸因於setNeedsDisplay
觸發手動重畫是昂貴的。
但通過Apple文檔和現實世界的應用程序。有意義的是drawRect()
應該負責View的繪製,並且layoutSubviews()
應該負責處理定位。