我怎样才能增加CGRect的大小一定的百分比值?
我怎样才能增加CGRect的大小一定的百分比值? 我应该使用某种forms的CGRectInset
来做到这一点?
例:
假设我有一个CGRect: {10, 10, 110, 110}
10,10,110,110 {10, 10, 110, 110}
我想把它的大小(保持相同的中心点)增加20%,以便:
{0, 0, 120, 120}
如果你喜欢,你可以使用CGRectInset
:
double pct = 0.2; CGRect newRect = CGRectInset(oldRect, -CGRectGetWidth(oldRect)*pct/2, -CGRectGetHeight(oldRect)*pct/2);
要减小尺寸,请删除-
s。
注意 :比{10, 10, 100, 100}
CGRect
{10, 10, 100, 100}
大20%的CGRect
是{10, 10, 100, 100}
CGRect
{0, 0, 120, 120}
。
编辑 :如果意图是增加面积,那么这将做到这一点(即使是非矩形的矩形):
CGFloat width = CGRectGetWidth(oldRect); CGFloat height = CGRectGetHeight(oldRect); double pct = 1.2; // 20% increase double newWidth = sqrt(width * width * pct); double newHeight = sqrt(height * height * pct); CGRect newRect = CGRectInset(oldRect, (width-newWidth)/2, (height-newHeight)/2);
在Swift中:
func increaseRect(rect: CGRect, byPercentage percentage: CGFloat) -> CGRect { let startWidth = CGRectGetWidth(rect) let startHeight = CGRectGetHeight(rect) let adjustmentWidth = (startWidth * percentage) / 2.0 let adjustmentHeight = (startHeight * percentage) / 2.0 return CGRectInset(rect, -adjustmentWidth, -adjustmentHeight) } let rect = CGRectMake(0, 0, 10, 10) let adjusted = increaseRect(rect, byPercentage: 0.1) // -0.5, -0.5, 11, 11
在ObjC:
- (CGRect)increaseRect:(CGRect)rect byPercentage:(CGFloat)percentage { CGFloat startWidth = CGRectGetWidth(rect); CGFloat startHeight = CGRectGetHeight(rect); CGFloat adjustmentWidth = (startWidth * percentage) / 2.0; CGFloat adjustmentHeight = (startHeight * percentage) / 2.0; return CGRectInset(rect, -adjustmentWidth, -adjustmentHeight); } CGRect rect = CGRectMake(0,0,10,10); CGRect adjusted = [self increaseRect:rect byPercentage:0.1]; // -0.5, -0.5, 11, 11
当然,使用CGRectInset
作品:
CGRect someRect = CGRectMake(10, 10, 100, 100); someRect = CGRectInset(someRect, someRect.size.width * -0.2, someRect.size.height * -0.2);
let scale = percent / 100 let newRect = oldRect.applying(CGAffineTransform(scaleX: scale, y: scale))
注意这种方法也会改变矩形的x和y。
使用Swift,可以保留中心点(相对于源Rect),并使用扩展名按如下所示增加/减小大小:
extension CGRect { func centerAndAdjustPercentage(percentage p: CGFloat) -> CGRect { let x = self.origin.x let y = self.origin.y let w = self.width let h = self.height let newW = w * p let newH = h * p let newX = (w - newW) / 2 let newY = (h - newH) / 2 return CGRect(x: newX, y: newY, width: newW, height: newH) } } let newRect = oldRect.centerAndAdjustPercentage(percentage: 0.25)