CGRectInset
与 CGRectOffset
都是通过参数改变CGRect
并返回一个CGRect
类型的数据。总结出两者的区别在于:CGRectInset
会进行平移和缩放两个操作。CGRectOffset
做的只是平移。
先把苹果的官方文档做简要解释:
CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy):
通过第二个参数 dx 和第三个参数 dy 重置第一个参数 rect 作为结果返回。重置的方式为,首先将 rect 的坐标(origin)按照(dx,dy) 进行平移,然后将 rect 的大小(size) 宽度缩小2倍的 dx,高度缩小2倍的 dy。
CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy):
rect 按照(dx,dy)进行平移。
两者的具体效果如何呢?下面通过代码和程序运行结果做形象解释。
1 2 3 4 5 6 7 8 9 10 11 12
| - (void)testCGRectInset { UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)]; [view1 setBackgroundColor:[UIColor yellowColor]]; [self.view addSubview:view1];
CGRect view2Rect=CGRectInset(view1.frame, 20, 20); UIView *view2=[[UIView alloc]initWithFrame:view2Rect]; [view2 setBackgroundColor:[UIColor redColor]]; [self.view addSubview:view2]; }
|
如下图左边第一个所示,红色视图首先按照我们给的参数做了平移 然后对大小做了缩放。这里我给的参数是正数,如果换成负数,则向反方向平移并做放大,如下图第二张所示,视图层级关系如图第三张。
同样的思路,对于 CGRectOffset ,有:
1 2 3 4 5 6 7 8 9 10 11 12
| -(void)testCGRectOffset { UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)]; [view1 setBackgroundColor:[UIColor yellowColor]]; [self.view addSubview:view1];
CGRect view2Rect=CGRectOffset(view1.frame, 20, 20); UIView *view2=[[UIView alloc]initWithFrame:view2Rect]; [view2 setBackgroundColor:[UIColor redColor]]; [self.view addSubview:view2]; }
|
运行结果如下所示(包括参数是正数和负数两种情况):
由上图可以形象地看出,该方法只是做了平移操作,没有缩放。