欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对比 CGRectInset 与 CGRectOffset

程序员文章站 2022-03-20 10:08:42
...

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)进行平移。

两者的具体效果如何呢?下面通过代码和程序运行结果做形象解释。

-(void)testCGRectInset
{
    UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    [view1 setBackgroundColor:[UIColor yellowColor]];//view1 设置为黄色
    [self.view addSubview:view1];

    //根据view1的大小变换后创建view2;
    CGRect view2Rect=CGRectInset(view1.frame, 20, 20);
    UIView *view2=[[UIView alloc]initWithFrame:view2Rect];
    [view2 setBackgroundColor:[UIColor redColor]];//view2 设置为红色
    [self.view addSubview:view2];
}

如下图左边第一个所示,红色视图首先按照我们给的参数做了平移 然后对大小做了缩放。这里我给的参数是正数,如果换成负数,则向反方向平移并做放大,如下图第二张所示,视图层级关系如图第三张。

对比 CGRectInset 与 CGRectOffset

同样的思路,对于 CGRectOffset ,有:

-(void)testCGRectOffset
{
    UIView *view1=[[UIView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
    [view1 setBackgroundColor:[UIColor yellowColor]];//view1 设置为黄色
    [self.view addSubview:view1];

    //根据view1的大小变换后创建view2;
    CGRect view2Rect=CGRectOffset(view1.frame, 20, 20);
    UIView *view2=[[UIView alloc]initWithFrame:view2Rect];
    [view2 setBackgroundColor:[UIColor redColor]];//view2 设置为红色
    [self.view addSubview:view2];
}

运行结果如下所示(包括参数是正数和负数两种情况):
对比 CGRectInset 与 CGRectOffset

由上图可以形象地看出,该方法只是做了平移操作,没有缩放。