Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I increase the size of a CGRect by a certain percent value?

Tags:

How can I increase the size of a CGRect by a certain percent value? Should I use some form of CGRectInset to do it?

Example:

Assume I have a CGRect: {10, 10, 110, 110}

I want to increase its size (retaining the same center point) by 20% to:

{0, 0, 120, 120}

like image 839
brandonscript Avatar asked Nov 13 '14 21:11

brandonscript


2 Answers

You can use CGRectInset if you like:

double pct = 0.2; CGRect newRect = CGRectInset(oldRect, -CGRectGetWidth(oldRect)*pct/2, -CGRectGetHeight(oldRect)*pct/2); 

To decrease the size, remove the -s.

Side note: A CGRect that is 20% bigger than {10, 10, 100, 100} is {0, 0, 120, 120}.


Edit: If the intention is to increase by area, then this'll do it (even for rectangles that aren't square):

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); 
like image 181
Ian MacDonald Avatar answered Oct 13 '22 17:10

Ian MacDonald


In 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 

In 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 
like image 20
Logan Avatar answered Oct 13 '22 15:10

Logan