Ios 为什么CGSize类型的cornerRadii参数在-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]中?

Ios 为什么CGSize类型的cornerRadii参数在-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]中?,ios,uikit,uibezierpath,Ios,Uikit,Uibezierpath,我搞不懂这个。。。我在和你玩 -[UIBezierPath BEZIERPATH WITH ROUNDEDRECT:byRoundingCorners:cornerRadii:][/code>如下: bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 80, 80) byRoundingCorners:(UIRectCornerBott

我搞不懂这个。。。我在和你玩

-[UIBezierPath BEZIERPATH WITH ROUNDEDRECT:byRoundingCorners:cornerRadii:][/code>如下:

bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 80, 80)
                                   byRoundingCorners:(UIRectCornerBottomLeft)
                                         cornerRadii:CGSizeMake(20, 20)];
它的工作原理与预期一致。但是如果我将cornerRadii:CGSizeMake(20,20)替换为,比如说,
cornerRadii:CGSizeMake(20,5)
CGSizeMake(20,40)
,则没有区别

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

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


CGSize参数允许水平面和垂直面上的角半径不同。i、 e.非对称角


试着打开不同的角落,使用不同的值看看会发生什么。

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


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

我现在可以确认这是iOS 6之后引入的bug。我有一个运行iOS 6.1的旧4s。在该机器上,此代码:

  path = [UIBezierPath bezierPathWithRoundedRect: bounds
    byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight
   cornerRadii: CGSizeMake(bounds.size.width/2, bounds.size.width/6)
 ];
创建一个圆角为椭圆形的圆角矩形。正如您所期望的那样,曲线顶部的曲线更加平缓,侧面的曲线更加尖锐:

这是iOS 6.1映像,其中的角应为:

以下是从iOS 8.1.2运行时相同代码的外观:

在iOS>=7.0上,它似乎会忽略指定半径的高度,并将“宽度”值用于角椭圆的高度和宽度,这将强制它们始终为四分之一圆

我在苹果的bug reporter系统上记录了一个bug。我们看看他们怎么说。
我建议看到这个问题的其他人也报告一个bug。他们得到的报告越多,他们就越有可能解决问题。

这也是我所期望的。我听从了你的建议,采取了各种措施以及其他一些选择,但结果仍然是一样的。就像只使用CGSize.width值而忽略.heightWell一样,它应该会更改角的形状。您显示的代码是否是图像的实际代码(角大小与矩形大小的比较)?我也提交了一份错误报告。苹果声称这是一次有意的改变,iOS>=7正在按设计工作。我说公牛**t。新版本的
bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:
始终忽略高度参数,并且您的角始终是四分之一圆。在iOS下,即使在iOS 9上使用Swift,这似乎仍然是一个问题+