我有两个UIView子类,比如“A类”和“B类”。 A类在其初始化程序中具有代码[self addSubview:instanceOfClassB];
。在B类drawRect:
中是代码行[self addSubview:imageViewInstance];
。同样在B类drawRect:
中,我为该imageView实例的animationImages
,animationDuration
和animationRepeatCount
属性赋值。但是,我也在这个UIImageView实例上调用startAnimating
,但它总是崩溃应用程序。然后我尝试从类B的超级视图(类A)的startAnimating
调用该{UIDmageView实例上的drawRect:
。但是,它仍然因错误而崩溃:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' * - [__ NSArrayM insertObject:atIndex:]:object不能为nil'
在代码[imageView startAnimating];
的行上有“Thread 1:signal SIGABRT”消息。
我怀疑它崩溃了,因为在类A的drawRect
之后调用了类{B}的drawRect
,所以当我告诉图像视图开始动画时它会崩溃因为图像视图尚未创建。
所以基本上我要问的是我能用什么方法告诉图像视图在没有崩溃的情况下开始制作动画?
答案 0 :(得分:2)
在drawRect:
内修改状态或调用与绘图无关的方法听起来是一个非常糟糕的主意 - 除了绘图之外,你不应该在drawRect:
中做任何事情。
drawRect:
。重绘操作的频率和顺序由系统决定,并取决于几个方面(视图层次结构,遮挡......) - 因此您也不能依赖于调用drawRect:
的特定顺序。
您可以将对象的设置移出绘图代码,并根据用户交互启动动画。