23

我想不通...我在玩

-[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)or CGSizeMake(20, 40),则没有区别。

为什么是cornerRadiiCGSize而不是CGFloat那么?是CGSize.height为了什么?

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

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

4

3 回答 3

6

我现在可以确认这是 iOS 6 之后引入的错误。我有一个运行 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 6.1 图像,角落应该是

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

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

我在苹果的错误报告系统上记录了一个错误。我们会看看他们怎么说。我建议看到这个问题的其他人也报告一个错误。他们得到的报告越多,他们就越有可能修复它。

于 2015-01-22T19:45:51.140 回答
3

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

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

于 2013-09-18T21:53:46.723 回答
1

CGSize参数是允许水平和垂直平面上的拐角半径不同。即非对称角。

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

于 2013-09-18T19:52:38.513 回答