美文网首页iOS Swift
Swift UIview常用的扩展方法、圆角(2)

Swift UIview常用的扩展方法、圆角(2)

作者: 难猿 | 来源:发表于2023-03-31 23:30 被阅读0次

    有时候,我们可能只想给 UIView 的某一个或多个角设置圆角,而不是四个角都设置。在这种情况下,我们可以使用 UIBezierPath 来指定圆角的位置。

    下面是一个例子,展示了如何只给 UIView 的左上角和右下角设置圆角:

    extension UIView {
        func addCornerRadius(_ radius: CGFloat, corners: UIRectCorner) {
            let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
            let mask = CAShapeLayer()
            mask.path = path.cgPath
            layer.mask = mask
        }
    }
    

    在上述方法中,我们使用 UIBezierPath 的 roundedRect 方法来创建一个指定角度圆角的矩形路径。方法中的 corners 参数用来指定需要圆角的角,可以是左上角、右上角、左下角、右下角的组合。例如,如果你只想要左上角和右下角有圆角,你可以这样调用方法:

    myView.addCornerRadius(10, corners: [.topLeft, .bottomRight])
    

    需要注意的是,这种方法依然需要进行视图裁剪,因此可能会比普通的圆角效果稍微消耗一些性能。

    实现高性能的圆角效果需要注意以下几个方面:

    1、避免离屏渲染:当使用 CALayer 的 cornerRadius 属性时,如果视图需要离屏渲染,性能会受到影响。因此,应该尽量避免使用过多的离屏渲染。

    2、使用贝塞尔曲线:使用 UIBezierPath 的 addArc 方法可以创建一个具有圆角的路径,比使用 CALayer 的 cornerRadius 属性更加灵活,可以控制每个角的大小。

    3、使用 CAShapeLayer:使用 CAShapeLayer 作为视图的 mask 可以避免离屏渲染,并且性能比使用 CALayer 的 cornerRadius 属性更好。

    4、缓存图片:如果需要频繁地创建圆角图片,可以将图片缓存起来,避免多次生成,提高性能。

    5、去掉视图背景色:如果视图的背景色为不透明色,可以将其去掉,以避免不必要的绘制,提高性能。

    6、控制圆角半径:圆角半径越大,需要绘制的像素越多,性能也会受到影响。因此,应该尽量控制圆角半径的大小,避免过大。

    7、控制圆角数量:圆角数量越多,需要绘制的像素越多,性能也会受到影响。因此,应该尽量减少圆角的数量。

    综上所述,实现高性能的圆角效果需要综合考虑多个因素,包括绘制方式、缓存机制、视图设置等等。在实际开发中,需要根据具体情况选择最适合的实现方案,以达到最佳的性能和用户体验。

    相关文章

      网友评论

        本文标题:Swift UIview常用的扩展方法、圆角(2)

        本文链接:https://www.haomeiwen.com/subject/ktzfddtx.html