Iphone 处理drawRect多个调用
我发现我的drawRect被调用了不止一次。不幸的是,这产生了双重绘制一切的不幸副作用,因为我的所有子视图都是在drawRect(我是严格的无神论者w.r.t.界面生成器)中绘制的Iphone 处理drawRect多个调用,iphone,cocoa-touch,uiview,Iphone,Cocoa Touch,Uiview,我发现我的drawRect被调用了不止一次。不幸的是,这产生了双重绘制一切的不幸副作用,因为我的所有子视图都是在drawRect(我是严格的无神论者w.r.t.界面生成器)中绘制的 处理对drawrect的多次调用的最佳方法是什么?检查是否再次调用的标志?或者清除整个视图并从头开始重新绘制(如我所做的?当UIKit调用drawRect:时,应该已经为您清除设置为draw-into的图形上下文(除非您已将ClearContextBeforeDrawing属性设置为否)。您是否正在手动调用drawR
处理对drawrect的多次调用的最佳方法是什么?检查是否再次调用的标志?或者清除整个视图并从头开始重新绘制(如我所做的?当UIKit调用
drawRect:
时,应该已经为您清除设置为draw-into的图形上下文(除非您已将ClearContextBeforeDrawing
属性设置为否
)。您是否正在手动调用drawRect:
而不是调用setNeedsDisplay
/setNeedsDisplayInRect:
此外,每个视图只负责绘制其自身的内容,而不负责绘制其子视图的内容。您所说的“您的子视图是在drawRect中绘制的”是什么意思?如果您的意思是要调用drawRect中的-addSubview:,请不要这样做。将这些视图移动到更合适的位置,仅在需要时调用(如果子视图始终存在,则可能是视图的-initWithFrame:方法),并仅使用drawRect进行自定义绘图
严格地说,多次调用是-drawRect的全部要点。它被调用来在需要时更新视图的小部分。如果您正在更新视图(移动视图、更新superview等),它实际上经常被调用,因此它应该尽可能简单、快速,以避免性能问题。例如,如果视图有UIButton,该怎么办?视图是否必须重新绘制UIButton?UIButton是UIView内容的一部分视图不能“有UIButton”,它可以包含UIButton,因为该按钮将是其子视图。子视图不被视为视图内容的一部分。