1:如题,2:有时候,我感觉重写两个方法都可以实现相同的效果,那么请问,应优先使用哪个方法.只有20分,全部奉上、大神见谅。

解决方案 »

  1.   

    你要首先知道这两个方法的调用时机
    layoutSubviews的调用时机:http://blog.csdn.net/zhangao0086/article/details/6904854
    drawRect是在视图被真正显示的时候,如果layer的contents没有内容,就会被调用
    除此之外,它们两个方法的目的是完全不同的:
    layoutSubviews是调整自己子视图们的frame;而drawRect是创建自己的视图内容
      

  2.   


    在init里也可以设置它子视图的布局,实现和layoutsubviews方法同样的效果,所以我觉得layoutsubviews应该还有有其他的作用。
      

  3.   


    在init里也可以设置它子视图的布局,实现和layoutsubviews方法同样的效果,所以我觉得layoutsubviews应该还有有其他的作用。
    大多数情况下不要在init里面设置,设置init时可能并没有frame这个参数,你要写通用的控件,需要预防这种情况,苹果提供了layoutSubviews方法就是为了应对这种情形
      

  4.   


    在init里也可以设置它子视图的布局,实现和layoutsubviews方法同样的效果,所以我觉得layoutsubviews应该还有有其他的作用。
    你注意观察layoutSubviews的调用时机:
    1.init时不会被调用、
    2.将要真正显示的会调用
    3.frame发现改变时智能调用
    4.滚动、旋转、remove等等时
    这些时机都是和frame相关的,也是唯一能更新子视图的最好时机