美文网首页
iOS中bounds和frame的理解

iOS中bounds和frame的理解

作者: Shawn_Wang | 来源:发表于2016-08-10 00:40 被阅读141次

    frame,bounds,center之间的关系

    Frame A (CGRect)表示其在superview的坐标系中的矩形位置。默认从左上开始。location(x,y), size(width,height).

    Bounds A (CGRect)表示其在自身坐标系中矩形位置。默认location(x,y)为(0,0),size(width,height).

    Center A (CGPoint)表示在其superview的坐标系中的位置。

    有以下几个结论(前提是view没有旋转)

    frame.origin = center - (bounds.size / 2.0)
    center = frame.origin + (bounds.size / 2.0)
    frame.size = bounds.size
    

    所以说 如果你一直认为view.frame.size = view.bouds.size,那么很遗憾的告诉你这个想法是错误的。因为如果view发生了旋转,结果就不是你想象的那个样子了。

    1.png

    例子中是一旋转了的图片,所以frame.size != bounds.size.

    当你在一个view自身的坐标系内处理画图的时候,通常使用bounds属性。
    对于一个view,当你改变了它的bounds.size,那么它的frame也会随之改变(反之亦然)。而且这个改变是围绕view的center改变的。

    当父view的bounds.origin改变,会影响其子view在父view中的位置。因为子view在父view中的布局是相对父view..bounds.origin=>(0,0)时的布局。

    2.png
    CGRect rect = [[self view] bounds];
    rect.origin.x += 30.0f;
    rect.origin.y += 20.0f;
    [[self view] setBounds:rect];
    
    3.png

    可以看出 子view位置变化了。

    相关文章

      网友评论

          本文标题:iOS中bounds和frame的理解

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