在drawRect之后有没有直接调用的方法?
我有两个UIView子类,比如说“Class A”和“Class B”。类A在其初始化程序中,代码为[self addSubview:instanceOfClassB];
。而在B类的drawRect:
是代码行[self addSubview:imageViewInstance];
。同样在B类的drawRect:
中,我将值分配给该imageView实例的animationImages
,animationDuration
和animationRepeatCount
属性。但是,我也在此UIImageView实例上调用startAnimating
,但它总是使应用程序崩溃。然后,我尝试从乙级的上海华盈的drawRect:
是UIImageView的实例调用startAnimating
,A级。但是,它仍然与错误崩溃:在drawRect之后有没有直接调用的方法?
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
而且具有“主题1:信号SIGABRT”上线消息代码为[imageView startAnimating];
。
我怀疑它在这里崩溃,因为B类的drawRect
正在类的drawRect
之后调用,所以,当我告诉图像视图启动动画崩溃,因为图像观点尚未创建。 所以基本上我问的是在什么方法可以告诉图像视图开始动画没有崩溃?
从drawRect:
中修改状态或调用与绘图无关的方法听起来像是一个非常糟糕的主意 - 除了绘图之外,您不应该在drawRect:
中执行任何操作。
drawRect:
会在视图或视图的一部分需要重新绘制时自动调用。重绘操作的频率和顺序由系统决定,并取决于几件事情(视图层次结构,遮挡,...) - 因此,您也不能依赖调用drawRect:
的特定顺序。
您可以将对象的设置移出绘图代码,并根据用户交互开始动画。
您可以添加异常断点以查看代码崩溃的位置:http://developer.apple.com/library/ios/#recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html – 2013-04-21 07:11:56
@weichsel - 我已经确定它在哪里崩溃;问题是我无法找到一种替代方法来完成我上面描述的内容。 – pasawaya 2013-04-21 07:15:26
问题 - 为什么在drawRect中添加imageViewInstance?为什么不在init方法中? – 2013-04-21 07:21:03