UI控件的位置操作

在一个UI控制器中先有一个大的VIEW,我们可以通过[self.view subviews]获取控制器上所有的子组件,而组件的位置参照物都是父控件。我们常用到的修改组件的位置属性有frame、bounds、bounds、transform,值得注意的是,这些属性都是结构体,而苹果不允许我们直接修改属性结构体里面成员的值,一般都需要先取出来这个结构体,对这个结构体修改,再把结构体赋值给原来的属性,并且bounds属性的横纵坐标是相对于组件自己来说,所以bounds属性中的横纵坐标永远都是(0,0),在API中我们可以看到用了一个分类对UIView进行了扩展。

主要属性在分类中做了扩展

@interfaceUIView(UIViewGeometry)

 // animatable. do not use frame if view is transformedsince it will not correctly reflect the actual location of the view. use bounds+ center instead.

@property(nonatomic) CGRect            frame; //(横坐标,纵坐标,宽,高)

// use bounds/center and not frame if non-identitytransform. if bounds dimension is odd, center may be have fractional part

@property(nonatomic) CGRect            bounds;      //(0,0,宽,高)

@property(nonatomic) CGPoint           center;      //(横坐标,纵坐标)

@property(nonatomic) CGAffineTransform transform;  //旋转 缩放


引用一张苹果官方的图片对各个属性的说明

UI控件的位置操作

常见的赋值修改位置操作

CGRect frame=superView.frame;

frame.origin.x=self.view.frame.size.width;

superView.frame=frame;

//superView.frame.origin.x=10;  这句编译器会不通过不能直接修改结构体的内部的成员的值


也可以用以下方式修改

btn.frame=(CGRect){ponit,normalImage.size};


UI控件的位置操作

上一篇:用递归来替代循环


下一篇:POJ 1625 ac自动机+高精度dp