Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is cornerRadii parameter of CGSize type in -[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]?

Tags:

I can't figure this out... I'm playing with

-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:] as such:

bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 80, 80)                                    byRoundingCorners:(UIRectCornerBottomLeft)                                          cornerRadii:CGSizeMake(20, 20)]; 

And it works as expected. But if I replace cornerRadii:CGSizeMake(20, 20) with, say, cornerRadii:CGSizeMake(20, 5) or CGSizeMake(20, 40), there's no difference.

Why is cornerRadii CGSize and not CGFloat then? What is CGSize.height for?

Any ideas and advice will be greatly appreciated :)

enter image description hereenter image description here

like image 491
Bartek Chlebek Avatar asked Sep 18 '13 19:09

Bartek Chlebek


1 Answers

I can now confirm that this is a bug introduced after iOS 6. I have an old 4s running iOS 6.1. On that machine, this code:

  path = [UIBezierPath bezierPathWithRoundedRect: bounds     byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight    cornerRadii: CGSizeMake(bounds.size.width/2, bounds.size.width/6)  ]; 

Creates a rounded rectangle with the corners oval-shaped. The curve is much more gradual on the top part of the curve, and much sharper on the sides, as you would expect:

This is the iOS 6.1 image, with the corners as they should be: This is the iOS 6.1 image, with the corners as they should be

And here is what the same code looks like when run from iOS 8.1.2: enter image description here

It appears that on iOS >=7.0, it ignores the height of the specified radius and uses the width value for both the height and the width of the corner ovals, which forces them to always be quarter circles.

I've logged a bug on apple's bug reporter system. We'll see what they say. I suggest everybody else who's seeing this problem report a bug also. The more reports they get, the more likely they are to fix it.

like image 69
Duncan C Avatar answered Sep 27 '22 23:09

Duncan C