UIView controller 大小初始化

1 view contoller的初始化

initWithFrame:  self.view.bounds   or self.view.frame  or   CGRectMake(0, 0, 100, 100)

bound和frame是两个结构体变量:

struct CGRect {

    CGPoint origin;

    CGSize size;

};

typedef struct CG_BOXABLE CGRect CGRect;

//--------------------------------------------

struct

CGPoint {

    CGFloat x;

    CGFloat y;

};

typedef struct CG_BOXABLE CGPoint CGPoint;

//---------------------------------------------

struct CGSize {

    CGFloat width;

    CGFloat height;

};

 

---------------------------------------------

CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

{

  CGRect rect;

  rect.origin.x = x; rect.origin.y = y;

  rect.size.width = width; rect.size.height = height;

  return rect;

}

关于Frame和bounds:

Frame

As the documentation clarifies, the frame of a view is a structure, a CGRect, that defines the size of the view and its position in the view's superview(依赖父view), the superview's coordinate system. Take a look at the following diagram for clarification.The frame rectangle, which describes the view’s location and size in its superview’s coordinate system.

UIView controller 大小初始化

Bounds

The bounds property of a view defines the size of the view and its position in the view's own coordinate system. This means that in most cases the origin of the bounds of a view are set to {0,0} as shown in the following diagram. The view's bounds is important for drawing the view.The bounds rectangle, which describes the view’s location and size in its own coordinate system.

UIView controller 大小初始化

 

This means a few things:

  1. If you create a view at X:0, Y:0, width:100, height:100, its frame and bounds are the same.
  2. If you move that view to X:100, its frame will reflect that change but its bounds will not. Remember, the bounds is relative(相对) to the view’s own space, and internally to the view nothing has changed.
  3. If you transform(改变) the view, e.g. rotating it or scaling it up(旋转缩放), the frame will change to reflect(反映) that, but the bounds still won’t – as far as the view is concerned(关注) internally, it hasn’t changed.
  4. When you change the width or height of either frame or bounds, the other value is updated to match. Generally it’s better to modify bounds plus center and transform, and let UIKit calculate the framefor you.

CGRectMake 设置原点和宽高,但是坐标系要看它是附在哪个view上。

UIView controller 大小初始化

 setBounds的作用是:强制将自己(view1)坐标系的左上角点,改为(-20,-20)。那么view1的原点,自然就向在右下方偏移(20,20)

上一篇:为什么Linux默认有C编译器?


下一篇:CF 613D - Kindom and its Cities-虚树