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;
}