我可以用 UIEdgeInsets 调整 CGRect 吗?
Can I adjust a CGRect with a UIEdgeInsets?
我有一个 CGRect
,我想用 UIEdgeInsets
来调整它。
似乎可能有一个内置函数可以执行此操作。我一直在寻找 CGRectAdjustByInsets
或带有其他 CGRect…
前缀的函数,但我没有找到任何东西。
我应该自己编码吗?
TL;DR
Swift 4.2 使用theRect.inset(by: theInsets)
.
Objective c 使用 UIEdgeInsetsInsetRect(theRect, theInsets)
例子
// CGRectMake takes: left, bottom, width, height.
const CGRect originalRect = CGRectMake(0, 0, 100, 50);
// UIEdgeInsetsMake takes: top, left, bottom, right.
const UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, -20, -20);
// Apply the insets…
const CGRect adjustedRect = UIEdgeInsetsInsetRect(originalRect, insets);
// What's the result?
NSLog(@"%@ inset by %@ is %@",
NSStringFromCGRect(originalRect),
NSStringFromUIEdgeInsets(insets),
NSStringFromCGRect(adjustedRect));
// Logs out…
// {{0, 0}, {100, 50}} inset by {10, 10, -20, -20} is {{10, 10}, {110, 60}}
说明
- 正向插入将矩形的边缘向内移动(朝向矩形中间)。
- 负插图将边缘向外移动(远离矩形中间)。
- 零插入将单独留下边缘。
告诉我更多
在 CGRect
上操作的更多有用函数包含在 this note 中。
2018 ... Swift4
假设你想要边界,
但例如底部上少了两个像素:
let ei = UIEdgeInsetsMake(0, 0, 2, 0) // top-left-bottom-right
let smaller = UIEdgeInsetsInsetRect(bounds, ei)
就是这样。
如果你更喜欢把它写成一行,那就是
从底部取下两个:
let newBounds = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 2, 0))
干杯
还是2018 ... Swift 4.2
我想新方法看起来更好...
let newCGRect = oldCGRect.inset(by: UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8))
CGRect insetRect = CGRectInset(rOriginalRect, fInsetX, fInsetY);
我有一个 CGRect
,我想用 UIEdgeInsets
来调整它。
似乎可能有一个内置函数可以执行此操作。我一直在寻找 CGRectAdjustByInsets
或带有其他 CGRect…
前缀的函数,但我没有找到任何东西。
我应该自己编码吗?
TL;DR
Swift 4.2 使用theRect.inset(by: theInsets)
.
Objective c 使用 UIEdgeInsetsInsetRect(theRect, theInsets)
例子
// CGRectMake takes: left, bottom, width, height.
const CGRect originalRect = CGRectMake(0, 0, 100, 50);
// UIEdgeInsetsMake takes: top, left, bottom, right.
const UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, -20, -20);
// Apply the insets…
const CGRect adjustedRect = UIEdgeInsetsInsetRect(originalRect, insets);
// What's the result?
NSLog(@"%@ inset by %@ is %@",
NSStringFromCGRect(originalRect),
NSStringFromUIEdgeInsets(insets),
NSStringFromCGRect(adjustedRect));
// Logs out…
// {{0, 0}, {100, 50}} inset by {10, 10, -20, -20} is {{10, 10}, {110, 60}}
说明
- 正向插入将矩形的边缘向内移动(朝向矩形中间)。
- 负插图将边缘向外移动(远离矩形中间)。
- 零插入将单独留下边缘。
告诉我更多
在 CGRect
上操作的更多有用函数包含在 this note 中。
2018 ... Swift4
假设你想要边界,
但例如底部上少了两个像素:
let ei = UIEdgeInsetsMake(0, 0, 2, 0) // top-left-bottom-right
let smaller = UIEdgeInsetsInsetRect(bounds, ei)
就是这样。
如果你更喜欢把它写成一行,那就是
从底部取下两个:
let newBounds = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 2, 0))
干杯
还是2018 ... Swift 4.2
我想新方法看起来更好...
let newCGRect = oldCGRect.inset(by: UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8))
CGRect insetRect = CGRectInset(rOriginalRect, fInsetX, fInsetY);