我怎样才能增加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)