Ios 是否有直接在drawRect:之后调用的方法?

Ios 是否有直接在drawRect:之后调用的方法?,ios,objective-c,animation,uiimageview,drawrect,Ios,Objective C,Animation,Uiimageview,Drawrect,我有两个UIView子类,分别是“Class A”和“Class B”。类的初始值设定项中有代码[self addSubview:instanceOfClassB]。在B类的drawRect:中是代码[self addSubview:imageViewInstance]的行。同样在类B的drawRect:中,我为该imageView实例的animationImages、animationDuration和animationRepeatCount属性赋值。但是,我也在这个UIImageView实例

我有两个UIView子类,分别是“Class A”和“Class B”。类的初始值设定项中有代码
[self addSubview:instanceOfClassB]。在B类的
drawRect:
中是代码
[self addSubview:imageViewInstance]的行。同样在类B的
drawRect:
中,我为该imageView实例的
animationImages
animationDuration
animationRepeatCount
属性赋值。但是,我也在这个UIImageView实例上调用了
startAnimating
,但它总是使应用程序崩溃。然后,我尝试从B类的superview类A的
drawRect:
调用该UIImageView实例上的
startAnimating
。但是,它仍然会因错误而崩溃:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*-[\uu NSArrayM insertObject:atIndex:]:对象不能为零”

并且在代码
[imageView startAnimating]的行上有“Thread 1:signal SIGABRT”消息

我怀疑它在这里崩溃是因为类B的
drawRect
在类A的
drawRect
之后被调用,所以当我告诉图像视图开始设置动画时,它崩溃了,因为图像视图尚未创建。
因此,基本上我要问的是,我可以用什么方法告诉图像视图在没有崩溃的情况下开始制作动画?

修改状态或调用与从
drawRect:
中绘制无关的方法听起来是个非常糟糕的主意-除了绘制之外,不应该在
drawRect:
中执行任何操作

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


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

您可以添加一个异常断点,以查看代码崩溃的确切位置:@weichsel-我已确定它崩溃的确切位置;问题是我找不到一种替代方法来完成上面描述的内容。问题-为什么要在drawRect中添加imageViewInstance?为什么不使用init方法呢?哈,我想伟大的人都有相同的想法。我更喜欢你的措辞,所以我会删除我的答案。如果我以前看过你的答案,我就不会回答了-基本上是一样的:)@weichsel-谢谢你的答案,但我的目标是在视图加载时开始动画,而不是在用户的提示下。还有其他方法吗?你可以把它放到控制器里。即进入视图控制器。查看UIViewController的ViewDidDisplay:或viewDidLoad: