美文网首页
iOS drawRect、CALayer 与动画

iOS drawRect、CALayer 与动画

作者: iOS小明 | 来源:发表于2016-04-23 16:49 被阅读1354次

    drawRect方法很适合做自定义的控件,当你需要更新UI的时候,只要用setNeedsDisplay标记一下就行了,这么做又简单又方便;控件也常常用于封装动画,但是动画却有可能被移除掉。

    需要注意的地方:


    1.在drawRect里尽量用CGContext绘制UI。如果你用addSubview插入了其他的视图,那么当系统在每次进入绘制的时候,会先把当前的上下文清除掉(此处不考虑clearsContextBeforeDrawing的影响),然后你也要清除掉已有的subviews,以免重复添加视图;用户可能会往你的控件上添加他自己的子视图,然后在某个情况下清除所有的子视图:


    [subViews makeObjectsPerFormSelector:@select(removeFormSuperView)];


    2.用CALayer代替UIView。CALayer节省内存,而且更适合去做一个“图层”,因为它不会接收事件、也不会成为响应链中的一员,但是它能够响应父视图(或layer)的尺寸变化,这种特性很适合做单纯的数据展示:


    CALayer *imageLayer = [CALayer layer];

    imageLayer.frame = rect;

    imageLayer.contents = (id)image;

    [self.view.layer addSublayer:imageLayer];


    3.如果有可能的话使用setNeedsDisplayInRect代替setNeedsDisplay以优化性能,但是遇到性能问题的时候应该先检查自己的绘图算法和绘图时机.

    相关文章

      网友评论

          本文标题:iOS drawRect、CALayer 与动画

          本文链接:https://www.haomeiwen.com/subject/dzaxrttx.html