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

qyuhtwio  于 2023-06-07  发布在  iOS
关注(0)|答案(4)|浏览(192)

我想不通...我在玩
-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]如下:

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

而且它的工作原理和预期的一样。但是如果我用cornerRadii:CGSizeMake(20, 5)CGSizeMake(20, 40)替换cornerRadii:CGSizeMake(20,20),就没有区别了。
为什么角半径是CGSize而不是CGFloatCGSize.height是什么?
任何想法和建议将非常感谢:)

1szpjjfi

1szpjjfi1#

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

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报告系统中记录了一个bug。看看他们怎么说我建议看到这个问题的其他人也报告一个bug。他们得到的报告越多,他们就越有可能修复它。

aiqt4smr

aiqt4smr2#

经过进一步的测试,我终于发现这似乎是一个iOS 7的bug。iOS 6模拟器上的相同代码可以正常绘制,正如预期的那样。但是,iOS 7模拟器和iOS 7设备都存在此问题,且绘制不正确。
我会提交一个bug报告,除非有人证明我错了,我错过了什么。

kr98yfug

kr98yfug3#

CGSize参数允许水平和垂直平面上的拐角半径不同。即非对称角。
试着在不同的角上转动并使用不同的值,看看会发生什么。

bmp9r5qi

bmp9r5qi4#

我解决了这个问题。我添加了扩展UIBezier,它实现了具有正确圆角的RoundedRect-Radii。它的实现没有丢弃垂直半径。可以使用椭圆形圆角。
https://github.com/BuTaJIuK-ua/UIBezierPath-Extension

相关问题