我正在與core-graphics
合作,並在我的應用程序中繪製不同類型的形狀並操作它們。所以我有大約150 UIView
對象(形狀),可以由用戶選擇。如何查找實例的類,然後在objective-c中聲明該類的另一個實例?
我有一個NSObject
類,它有滑塊來改變形狀的大小。因此,我將視圖實例從每個UIView
傳遞到此類NSObject
以修改其大小。
在NSObject
類我有一個函數象下面這樣:
-(id) initWithView:(id)shapeView
{
...
}
所以在運行時,當用戶選擇一個形狀並移動形狀的實例傳遞給這個函數在NSObject
類中的滑塊。現在我可以操縱特定「shapeView」的大小。
但問題是我不能訪問它所屬的類的UIView
的功能。
我不能用類似下面因爲shapeView的類型是在編譯時未知的,它拋出錯誤:
[shapeView someFunction:];
例如用戶選擇一個矩形的應用程序。然後ShapeView的Class類型是Rectangle。我可以使用[view class]
找出這個。所以我可以修改矩形的大小,但不能訪問它的功能。要訪問函數,我必須在NSObject
類中聲明Rectangle
類型的實例。所以我的問題是如何從實例中提取類名稱(在這種情況下是shapeView)並聲明該類類型的實例。
我知道一種方法是檢查每種類型的UIView
類的類型,然後相應地創建實例。但正如我所說,有150 UIView
類,在未來我會增加更多。那麼有沒有其他解決這個問題的方法?
您正在接收參數中的視圖,爲什麼您需要創建實例? – Apurv
我相當肯定,使這些形狀成爲「UIView」的一個子類是錯誤的方法。更好的方法是創建一個名爲'Shape'的類('NSObject'的一個子類),它具有'position'('CGPoint')和一個名爲'draw'的方法(繪製父'UIView'時調用),然後從這個'Shape'基類中派生形狀基元。 – trojanfoe
您可以忽略Runtime.h文件。它正在設置所有運行時功能。 – Apurv