iOS中设置圆角的方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS中设置圆角的方式相关的知识,希望对你有一定的参考价值。

参考技术A 1.设置视图的layer.cornerRadius属性

内存消耗16.9
对uiview或uiimageview使用layer.cornerRadius设置圆角时,会触发离屏渲染,会带来额外的性能消耗,影响UI流畅.
这种方式适合用在设置圆角比较少页面中,例如,头像的圆角或者按钮的圆角,可以用此方法,对性能的损耗可以忽略不计.
离屏渲染(Off-Screen Rendering):意为GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行操作;
在屏渲染(On-Screen Rendering): 意为当前屏幕的渲染, 指的是GPU的渲染操作发生在当前用于显示的屏幕缓冲区中;

2.贝塞尔曲线+CoreGraphics

内存消耗 8.6
这种方式适合用在设置圆角的控件比较多的情况下,用UIBezierPath和CoreGraphics框架画出一个圆角.例如使用uitableview或者uicollectionView需要给cell添加圆角/给控件添加圆角,此方式不会操作到layer层,也能够高效的添加圆角.

3.CoreGraphics

内存消耗 8.6
CoreGraphics也称为Quartz 2D 是UIKit下的主要绘图系统,频繁的用于绘制自定义视图。Core Graphics是高度集成于UIView和其他UIKit部分的。Core Graphics数据结构和函数可以通过前缀CG来识别。

无法在 iOS 中设置 UIView 的底部阴影?

【中文标题】无法在 iOS 中设置 UIView 的底部阴影?【英文标题】:Unable to set bottom shadow of UIView in iOS? 【发布时间】:2017-05-02 09:04:51 【问题描述】:

我想设置 UIView 的底部阴影。我也在设置圆角半径。如果我将 ma​​skToBounds 设置为 true 那么我无法设置UIView 请告诉我如何设置 UIView 的角半径和阴影。

 func addShadwToView()
    self.viewContainer.layer.masksToBounds = true;
    self.viewContainer.layer.shadowRadius = 15;
    self.viewContainer.layer.shadowOffset = CGSize(width: 0, height: 20)
    self.viewContainer.layer.shadowOpacity = 0.5;
    self.viewContainer.layer.cornerRadius = 5
    self.viewContainer.layer.borderColor = UIColor.lightGray.cgColor
    self.viewContainer.layer.borderWidth = 0.5
  

【问题讨论】:

确保任何其他视图没有重叠在上面。否则代码没有任何问题。 shadowColor在哪里? 【参考方案1】:

如果你想要一个圆角半径和一个投影,所以不要打开-masksToBounds,而是设置圆角半径并用圆角矩形设置阴影的贝塞尔路径。保持两者的半径相同: 试试看:

func addShadwToView()
                    var borderLine = CAShapeLayer()
                    borderLine.path =  UIBezierPath(roundedRect: frame2, byRoundingCorners: [.allCorners], cornerRadii: CGSize(width: 30, height: 0)).cgPath
                    borderLine.shadowColor = UIColor.white.cgColor
                    borderLine.shadowOffset = CGSize(width: 0, height: 1)
                    borderLine.shadowOpacity = 0.3
                    borderLine.shadowRadius = 10

                    self.viewContainer.layer.masksToBounds = true;
                    self.viewContainer.layer.cornerRadius = 5
                    self.viewContainer.layer.borderColor = UIColor.lightGray.cgColor
                    self.viewContainer.layer.borderWidth = 0.5
                    self.viewContainer.layer.addSublayer(borderLine)
                

【讨论】:

【参考方案2】:

试试这个代码...这将解决你的问题

    func addShadow()
        let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: customView.frame.width, height: customView.frame.height))
        customView.layer.shadowColor = UIColor.lightGray.cgColor
        customView.layer.shadowOffset = CGSize(width: 0, height: 20)
        customView.layer.shadowOpacity = 0.5
        customView.layer.shadowRadius = 15
        customView.layer.masksToBounds =  false
        customView.layer.shadowPath = shadowPath.cgPath

【讨论】:

以上是关于iOS中设置圆角的方式的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS 中设置 UIView 的底部阴影?

如何在tableview单元格中设置视图内的视图的圆角半径?

iOS-圆角设置性能优化

在ImageView中设置圆角图像

iOS图片设置圆角

iOS tableViewCell 同时设置圆角和阴影