我正在与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