import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myText: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myText: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
从 iOS 11 开始,请使用 Masked Corners 属性。
现在有一个用于图层的 maskedCorners 属性。这是一个 CACornerMask,每个角落都有四个可能的值:
创建一个扩展以更好地使用:
extension UIView {
func roundCorners(corners:CACornerMask, radius: CGFloat) {
self.layer.cornerRadius = radius
self.layer.maskedCorners = corners
}
}
例子:
class CustomCell: UICollectionViewCell {
override func layoutSubviews() {
//Round left and righ top corners
yourView.roundCorners(corners: [.layerMinXMinYCorner, .layerMaxXMinYCorner], radius: radius)
}
}
尝试这段代码
在 Xcode 8 和 Swift 3 中测试通过
extension UIView {
func roundCorners(corners:UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
}
并且像这样使用
lable.roundCorners(corners: [.topLeft], radius: 10)
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: .topLeft, cornerRadii: CGSize(width: 10.0, height: 10.0))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
myText.layer.mask = maskLayer
UILabel
类中使用。override func draw(_ rect: CGRect) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: .topLeft, cornerRadii: CGSize(width: 10.0, height: 10.0))
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
self.layer.mask = maskLayer
}
您需要添加以下行来设置圆角:
let radius = 15.0
let layer = CAShapeLayer()
let shadowPath = UIBezierPath(roundedRect: myText.frame, byRoundingCorners: ([.topLeft]), cornerRadii: CGSize(width: radius, height: radius ))
layer.path = shadowPath.cgPath
myText.layer.mask = layer
试一下,这对我很有效。
var textPath = UIBezierPath(roundedRect: myText.bounds, byRoundingCorners:
(.topLeft), cornerRadii: CGSize(width: 10.0, height: 10.0))
var textLayer = CAShapeLayer()
textLayer.frame = myText.bounds
textLayer.path = textPath.cgPath
myText.layer.mask = maskLayer