我有两个UIView子类,例如“Class A”和“Class B”。 A类在其初始值设定项中具有代码[self addSubview:instanceOfClassB];
。在B类的drawRect:
中是代码行[self addSubview:imageViewInstance];
。同样在B类的drawRect:
中,我为该imageView实例的animationImages
,animationDuration
和animationRepeatCount
属性分配值。但是,我也在此UIImageView实例上调用startAnimating
,但它始终使应用程序崩溃。然后,我尝试从B类 super 视图A类的startAnimating
调用该UIImageView实例上的drawRect:
。但是,它仍然崩溃并显示错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*-[__ NSArrayM insertObject:atIndex:]:对象不能为零”
并在代码为[imageView startAnimating];
的行上显示“线程1:信号SIGABRT”消息。
我怀疑它在这里崩溃,因为在类A的drawRect
之后调用了类B的drawRect
,所以当我告诉图像视图开始动画时,它崩溃了,因为尚未创建图像视图。
所以,基本上,我要问的是,我可以通过哪种方法告诉图像视图开始动画而不会崩溃?
最佳答案
修改状态或从drawRect:
中调用与绘图无关的方法听起来像是一个非常糟糕的主意-除了绘图,您不应该在drawRect:
中做任何事情。
每当需要重新绘制视图或视图的一部分时,都会自动调用drawRect:
。重绘操作的频率和顺序由系统决定,并取决于几件事(视图层次结构,遮挡等)-因此,您也不能依赖于drawRect:
调用的特定顺序。
您可以将对象的设置从绘图代码中移出,然后根据用户交互来启动动画。
关于ios - 在drawRect:之后有直接调用的方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16128801/