我正在使用core-graphics,在我的应用程序中,我正在绘制不同类型的形状并操纵它们。所以我有大约150个UIView对象(形状)可以由用户选择。
我有一个NSObject类,它有用来改变形状大小的滑块。因此,我将视图实例从每个UIView传递到这个NSObject类,以修改其大小。
在NSObject类中,我有一个如下所示的函数:
-(id) initWithView:(id)shapeView
{
...
}因此,在运行时,当用户选择一个形状并移动滑块时,该形状实例将传递给NSObject类中的此函数。现在我可以操纵特定"shapeView“的大小了。
但问题是我不能访问它所属的UIView类的函数。
我不能使用下面这样的代码,因为shapeView的类型在编译时是未知的,它会抛出错误:
[shapeView someFunction:];例如,用户在app中选择一个矩形。则shapeView的类类型为Rectangle。我可以使用[view class]找出这一点。所以我可以修改矩形的大小,但是不能访问它的函数。要访问函数,我必须在NSObject类中声明一个Rectangle类型的实例。因此,我的问题是如何从实例(在本例中为shapeView)中提取类名,并声明该类类型的实例。
我知道一种方法是检查每种类型的UIView类的类型,然后相应地创建实例。但正如我所说的,有150个UIView类,将来我会添加更多。那么,有没有其他方法来解决这个问题呢?
发布于 2014-06-16 15:20:42
我不认为每个单独的形状都有一个子类是个好主意。如果您有一个形状不规则的多边形,那么最好先声明一个像Polygon这样的类,然后再声明像numberOfSides和area这样的属性,甚至声明NSArray* edges或NSArray* angle。然后你会有一个drawRectangle方法,它将获取数据,并根据它所拥有的帧在屏幕上呈现它。
Circular和Composite可能是其他类,它们的复合是由两个单独定义的形状组成的任何奇怪的形状。
我建议您重新考虑您的设计,使其更易于管理。你永远不需要维护那么多的类,这就是我们首先使用Polymorphism的原因。
https://stackoverflow.com/questions/24238171
复制相似问题