我是非常非常新的iPhone開發。iPhone自定義用戶界面組件
我想創建一個可以包含正方形,圓形或三角形的UI組件。我會傳遞一個參數給它的構造函數來說它是我想要的形狀。
我希望這個物體可以通過acelerometer或用戶的手指移動。我也想讓它變得更大或更小。我想創建一個繼承UIView的自定義UI組件。
我不知道如果我用Quartz 2D繪製一個形狀,它將表現得像一個UI組件。
我可以這樣做嗎?你有更好的解決方案嗎?
我是非常非常新的iPhone開發。iPhone自定義用戶界面組件
我想創建一個可以包含正方形,圓形或三角形的UI組件。我會傳遞一個參數給它的構造函數來說它是我想要的形狀。
我希望這個物體可以通過acelerometer或用戶的手指移動。我也想讓它變得更大或更小。我想創建一個繼承UIView的自定義UI組件。
我不知道如果我用Quartz 2D繪製一個形狀,它將表現得像一個UI組件。
我可以這樣做嗎?你有更好的解決方案嗎?
我想簡單和規則解決方案繼承UIView
。正是你要做的。
概念,UIView
是通過繪製它們保持其視覺內容。 (在大多數情況下爲Quartz
!)如果視覺內容改變了? UIView
只是重新繪製它們。當你改變任何東西時,UIView
重新繪製一切。 (當然,這是概念上的描述,實際是一個很大的不同,因爲有重優化)
然而,重要的一點是你有這只是覆蓋方法做什麼。因爲UIKit
會執行大多數重要的優化,而不是您。
UIView
繪製其可視內容與- (void)drawRect:(CGRect)rect
方法。你可以重寫這個方法來繪製你的形狀。如果在此方法中繪製某個東西,則該形狀將繪製在透明視圖上。
如果操作視圖(縮放,移動,旋轉...)UIKit
可以要求重新繪製它的圖形視圖。而且,這個視圖會記得繪製你的形狀的方法。這是非常規律的技術。大多數使用此方法構建的自定義圖形和動畫。您所要做的只是在方法- (void)drawRect:(CGRect)rect
中編寫繪圖代碼。
是有關於這個概念的參考文檔不錯指南:
,照顧你必須通過調用UIGraphicsGetCurrentContext ( void );
方法,而不是與檢索CGContextRef
畫創造你自己的。上下文表示實際的設備屏幕。如果您創建自己的環境,則它們都不能提供實際的設備屏幕。
舉個例子:
@interface MyView : UIView
@end
@implementation MyView
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
// Do your drawing here with the `context`.
// And don't release it because the it is not yours, just borrowed from `UIKit`.
}
@end
也許你需要一種優化的任何形式。 UIKit
做了基本的優化,但不是全部。由於圖形優化在內存和處理之間有很多折衷。您可以從CALayer
和shouldRasterize
獲得一些優化。但是,如果您需要更多,則必須開始研究實時圖形。
Eonil所描述的繪製自定義視圖當然是可能的。但是,你有沒有考慮過簡單地使用UIImageView
?
「這是」意思是「它是」順便說一句。 http://garyes.stormloader.com/its.html – occulus 2011-03-03 12:14:49
@occulus哇!我非常感謝!總是歡迎糾正我錯誤的語法:) – Eonil 2011-03-03 12:33:06
@occulus:語法的很好的來源! – VansFannel 2011-03-03 12:58:10