1

我有两个 UIView 子类,比如“A 类”和“B 类”。A 类在其初始化程序中具有代码[self addSubview:instanceOfClassB];。在 B 类中drawRect:是代码行[self addSubview:imageViewInstance];。同样在 B 类中drawRect:,我将值分配给该 imageView 实例的animationImagesanimationDurationanimationRepeatCount属性。但是,我也调用startAnimating了这个 UIImageView 实例,但它总是使应用程序崩溃。然后,我尝试从B 类的超视图 A 类调用startAnimating该 UIImageView 实例。但是,它仍然因错误而崩溃:drawRect:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ * -[__NSArrayM insertObject:atIndex:]: object cannot be nil”

并且在代码行上有“线程 1:信号 SIGABRT”消息[imageView startAnimating];

我怀疑它在这里崩溃是因为drawRectB 类在 A 类之后被调用drawRect,所以当我告诉图像视图开始制作动画时它会崩溃,因为图像视图尚未创建。所以基本上我要问的是我可以用什么方法告诉图像视图开始动画而不会崩溃

4

1 回答 1

2

从内部修改状态或调用与绘图无关的方法drawRect:听起来是个非常糟糕的主意 -drawRect:除了绘图之外,您不应该做任何事情。

drawRect:每当视图或视图的一部分需要重新绘制时,都会自动调用。重绘操作的​​频率和顺序由系统决定,并取决于几个方面(视图层次结构、遮挡等) - 因此您也不能依赖于drawRect:调用的特定顺序。

您可以将对象的设置从绘图代码中移出,并根据用户交互启动动画。

于 2013-04-21T07:28:20.130 回答