CGRectInset CGRectoffset UIEdgeInsetsInsetRect 解释

CGRectInset CGRectoffset UIEdgeInsetsInsetRect ... -
这里也有解释,但是不全,重新整理一下:

CGRectInset

将原来的矩形以中心点为中心进行放大或者缩小,正值表示缩小,负值表示放大。

CGRect rect= CGRectMake(20,50,100,80);
CGRect rect1=CGRectInset(rect, -10,20);
NSLog(@"%@",p(rect1));

//输出结果:2014-11-22 18:48:55.351 TestCGRectInset[8893:60b] {{10, 70}, {120, 40}}
注意中心点没有变化。
大概是这样的计算公式:

CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy){
    rect.origin.x    += dx;
    rect.origin.y    += dy;
    rect.size.width  -= dx*2;
    rect.size.height -= dy*2;
    return rect;
}

负值怎么就表示放大呢?注意inset中的in,大概就是表示在矩形里面的,如果新矩形完全在原矩形的里面,这不就是in嘛,那么新矩形与旧矩形上下左右偏移值就是正值,对应新矩形是缩小的。反之的话偏移值就是负的,对应新矩形是放大的。

CGRectOffset

这个函数就是将原来矩形的坐标点变化一下,就是左上角点

CGRect rect= CGRectMake(20,50,100,80);
CGRect rect1=CGRectOffset(rect, -10,20);
NSLog(@"%@",p(rect1));
//输出结果:2014-11-22 18:51:58.217 TestCGRectInset[8913:60b] {{10, 70}, {100, 80}}

即size不变,newX = x + offset.x, newY = y + offset.y

offset主要就影响坐标位置,不影响size。

UIEdgeInsetsInsetRect

表示在原来的rect基础上根据边缘距离内切一个rect出来

    CGRect rect= CGRectMake(20,50,100,80);
    UIEdgeInsets ed=UIEdgeInsetsMake(-3, -4, -5, -6);  //上 左 下 右
    CGRect  rectNew =UIEdgeInsetsInsetRect(rect, ed);
    NSLog(@"rect is %@, rectNew is %@", NSStringFromCGRect(rect), NSStringFromCGRect(rectNew));

输出结果:rect is {{20, 50}, {100, 80}}, rectNew is {{16, 47}, {110, 88}}
这个是怎么算的呢,其实从定义就可以看出来:

UIKIT_STATIC_INLINE CGRect UIEdgeInsetsInsetRect(CGRect rect, UIEdgeInsets insets) {
    rect.origin.x    += insets.left;
    rect.origin.y    += insets.top;
    rect.size.width  -= (insets.left + insets.right);
    rect.size.height -= (insets.top  + insets.bottom);
    return rect;
}

相对于 CGRectInset 来说,并不是以中心点为放大或者缩小的
其实CGRectInset就是特殊的UIEdgeInsetsInsetRect,因为它是对称放大或者缩小的,而UIEdgeInsetsInsetRect并不一定对称放大或者缩小:

CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy){
    UIEdgeInsets ed=UIEdgeInsetsMake(dy, dx, dy, dx);  //上 左 下 右
    rect = UIEdgeInsetsInsetRect(rect, ed);
    return rect;
}

你可能感兴趣的:(CGRectInset CGRectoffset UIEdgeInsetsInsetRect 解释)