UIView的绘制是根据需要执行的。当视图被首次显示,或者因为布局发生改变而其部分或全部区域可见时,系统会要求视图绘制其内容。对于包含使用UIKit或是Core Graphics的自定义视图,系统会调用视图中的draw(_ rect: CGRect)方法进行绘制,开发者可以通过覆写此方法将视图相关的内容绘制到图形上下文中(第15章会详细介绍图形上下文的使用)。当视图的实际内容发生更改时,开发者需要通知系统视图进行重新绘制,此时可以通过调用setNeedsDisplay(_ rect: CGRect)或setNeedsDisplay(_ rect: CGRect)方法来告诉系统,系统则会在调用方法后的一个绘制周期中更新视图。因为重新绘制发生在下一个绘制周期,所以开发者不必担心调用setNeedsDisplay()方法会带来什么意想不到的结果。如果在一个绘制周期内需要更新多个视图,可以直接同时调用各自视图的setNeedsDisplay()方法。
对于有需要进行自定义绘制的视图,开发者可以通过覆写draw(_ rect: CGRect)方法实现此功能。但本书并不推荐这种做法,通常还是建议使用其他视图或者控件完成界面的绘制任务。draw(_ rect: CGRect)方法的实现中应该只做一件事,就是绘制视图中的专有内容。这个方法不是更新应用程序的数据结构或执行与绘制无关的代码的地方,它应该配置绘图环境,然后绘制内容并尽快退出。如果开发者的draw(_ rect: CGRect)方法经常被调用,应该尽一切可能优化绘制代码,并在每次调用方法时尽可能少地绘制,保持页面的流畅性。(www.xing528.com)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。