iOS 中有两个有关Rect的方法我们对比这着看一下
CGRectInset,CGRectOffset
我们先看一看 官方给出的解释
/* Inset `rect‘ by `(dx, dy)‘ -- i.e., offset its origin by `(dx, dy)‘, and
decrease its size by `(2*dx, 2*dy)‘. */
大致意思为: 通过 第二个参数 dx和第三个参数 dy 重置第一个参数rect 作为结果返回。重置的方式为,首先将rect 的坐标(origin)按照(dx,dy) 进行平移,然后将rect的大小(size) 宽度缩小2倍的dx,高度缩小2倍的dy;
CG_EXTERN CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
/* Offset `rect‘ by `(dx, dy)‘. */
大致意思:rect 按照(dx,dy)进行平移
CG_EXTERNCGRect CGRectOffset(CGRect rect,CGFloat
dx, CGFloat dy)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
下面我们用例子来看一下
首先我们测试CGRectInset 先创建一个view1设置一个背景色,在创建一个view2使用CGRectInset 将他的大小按照view1的大小进行修改设置一个不同的颜色进行测试
代码如下
-(void)testCGRectInset { UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(120, 120, 200, 200)]; [view1 setBackgroundColor:[UIColor grayColor]];//view1 设置为灰色 [self.view addSubview:view1]; //根据view1的大小变换后创建view2; CGRect view2Rect=CGRectInset(view1.frame, 20, 20); UIView *view2=[[UIView alloc]initWithFrame:view2Rect]; [view2 setBackgroundColor:[UIColor blueColor]];//view2 设置为蓝色 [self.view addSubview:view2]; }
运行结果如下
我们可以看到 蓝色首先按照我们给的参数做了平移 然后对大小做了缩放。
这里我们变化你的时候给的参数都是正数,如果给成负数会怎样了 大家可以去试试
//根据view1的大小变换后创建view2; CGRect view2Rect=CGRectInset(view1.frame, -20, -20);
下来我们看第二个方法,也是同样的思路
代码如下
-(void)testCGRectOffset { UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(120, 120, 200, 200)]; [view1 setBackgroundColor:[UIColor grayColor]];//view1 设置为灰色 [self.view addSubview:view1]; //根据view1的大小变换后创建view2; CGRect view2Rect=CGRectOffset(view1.frame, 20, 20); UIView *view2=[[UIView alloc]initWithFrame:view2Rect]; [view2 setBackgroundColor:[UIColor blueColor]];//view2 设置为蓝色 [self.view addSubview:view2]; }
结果如下图
我们看到相比较与上一个方法 他只做了平移 没有做大小缩放
好了 两个方法 都已经实验了
如果还有问题 可以加群讨论
苹果开发群 :414319235 欢迎加入 欢迎讨论问题
版权声明:本文为博主原创文章,未经博主允许不得转载。