为什么CGSize的cornerRadii参数键入 - [UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]?

Bar*_*bek 19 uikit ios uibezierpath

我无法弄明白......我正在玩

-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:] 因此:

bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 80, 80)
                                   byRoundingCorners:(UIRectCornerBottomLeft)
                                         cornerRadii:CGSizeMake(20, 20)];
Run Code Online (Sandbox Code Playgroud)

它按预期工作.但是,如果我用,比方说,cornerRadii:CGSizeMake(20, 5)或者替换cornerRadii:CGSizeMake(20,20)CGSizeMake(20, 40),则没有区别.

为什么是cornerRadii CGSize而不是CGFloat呢?什么是CGSize.height

任何想法和建议将不胜感激:)

在此输入图像描述 在此输入图像描述

Dun*_*n C 6

我现在可以确认这是iOS 6之后引入的一个错误.我有一个运行iOS 6.1的旧4.在那台机器上,这段代码:

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

创建一个圆角矩形,边角为椭圆形.曲线顶部的曲线更加渐进,两侧更加锐利,如您所料:

这是iOS 6.1图像,应该是角落: 这是iOS 6.1图像,应该是角落

以下是从iOS 8.1.2运行时相同的代码: 在此输入图像描述

看起来在iOS> = 7.0时,它会忽略指定半径的高度,并使用角度椭圆的高度和宽度的宽度值,这会强制它们始终为四分之一圆.

我在苹果的bug报告系统上记录了一个错误.我们会看到他们说的话.我建议所有看到此问题的人也报告错误.他们获得的报告越多,他们就越有可能修复它.

  • 即使在iOS 9+上使用Swift,这似乎仍然是一个问题 (2认同)

Bar*_*bek 3

好吧,经过进一步测试我终于发现这似乎是iOS 7的一个bug。正如预期的那样,相同的代码在 iOS 6 模拟器上正确绘制。然而,iOS 7模拟器和iOS 7设备都有这个问题并且绘制不正确。

我将提交一份错误报告,除非有人证明我错了并且我遗漏了一些东西。

  • 我也就此提交了错误报告。Apple 声称这是一个有意的更改,iOS >=7 正在按设计运行。我说胡说八道。新版本的“bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:”始终忽略高度参数,并且您的角始终是四分之一圆。在 iOS <= 6 下,您可以得到椭圆形角,但现在不能了。苹果在这一点上充满了它。他们破坏了一个工作功能。 (2认同)