"在幕后" cornerRadius和bezierPathWithRoundedRect之间的区别

时间:2017-04-26 15:31:32

标签: ios objective-c core-graphics uibezierpath cornerradius

前提:我正在用一个坚实的背景围绕一个视图的边缘(做一个像椭圆形的东西)。有很多方法可以做到这一点,但我推荐的两个最常见的方法是:

1)在视图图层上设置cornerRadius属性,并将遮罩层绑定到视图图层边界(通过clipsToBounds或masksToBounds)(https://developer.apple.com/reference/quartzcore/calayer/1410818-cornerradius) 例如:

    view.layer.cornerRadius = 2
    view.layer.maskToBounds = true

2)使用[bezierPathWithRoundedRect:byRoundingCorners:cornerRadii]创建Bezier路径,并使用它创建一个掩码图层,您可以将其设置为视图的图层蒙版。 (https://developer.apple.com/reference/uikit/uibezierpath/1624368-bezierpathwithroundedrect) 例如:

    UIBezierPath* bezierPath = [UIBezierPath bezierPathWithRoundedRect: view.bounds 
      byRoundingCorners:UIRectCornerAllCorners 
      cornerRadii: CGSizeMake(2, 2)];
    CAShapeLayer* maskLayer = [CAShapeLayer layer];
    maskLayer.frame = view.bounds;
    maskLayer.path = bezierPath.CGPath;
    view.layer.mask = maskLayer;

问题:这两种方式对我来说都很有效,我发现一方面没有显着的表现(不可否认,我没有大量使用它)。在哪种情况下,我应该使用Bezier路径来设置角半径(假设角半径相等)?创建圆边的这两种方法在幕后做同样的事吗?是否有某些平台不支持这两种解决方案?

最好的问候

0 个答案:

没有答案