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

时间:2013-09-18 19:41:38

标签: ios uikit uibezierpath

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

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

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

非常感谢任何想法和建议:)

enter image description here enter image description here

3 个答案:

答案 0 :(得分:6)

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

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

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

这是iOS 6.1图片,应该是角落: This is the iOS 6.1 image, with the corners as they should be

以下是从iOS 8.1.2运行时的相同代码: enter image description here

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

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

答案 1 :(得分:3)

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

我会提交一份错误报告,除非有人证明我错了,而且我有些遗漏。

答案 2 :(得分:1)

CGSize参数允许水平和垂直平面上的角半径不同。即一个不对称的角落。

尝试打开不同的角落并使用不同的值来查看会发生什么。