UIBezierPath 在右上角和右下角不起作用
UIBezierPath doesn't work in TopRight corner and BottomRight corner
我想将右角圆化,但只适用于左角
let path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.TopRight], cornerRadii: CGSizeMake(20.0, 20.0))
let maskLayer = CAShapeLayer()
maskLayer.path = path.CGPath
view.layer.mask = maskLayer
view.layer.masksToBounds = true
问题是您在针对当前设备调整视图大小之前获取视图的边界。它比稍后出现在屏幕上时要大,因此圆角矩形的右侧不在屏幕右侧。
您需要稍后创建 path
并设置 maskLayer.path
,在调整视图大小之后,这意味着在 运行 循环的布局阶段期间或之后。因此,要么将视图子类化并在视图的 layoutSubviews
方法中执行,要么在视图控制器的 viewDidLayoutSubviews
方法中执行。
如果您尝试为在 Storyboard 或 Xib 上设计的 View 设置 RoundingCorners,请设置角并MaskLayer.path进入以下方法。
override func viewDidLayoutSubviews() {
// here you can write the code...
}
Swift 3
对我有用!
override func layoutSubviews() {
super.layoutSubviews()
DispatchQueue.main.async {
self.containerView.roundCorners(corners: [.topRight,.topLeft], radius: 25)
self.containerView.layer.masksToBounds = true
}
self.layoutIfNeeded()
}
您可以在此处查看方法 "roundCorners":
我想将右角圆化,但只适用于左角
let path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.TopRight], cornerRadii: CGSizeMake(20.0, 20.0))
let maskLayer = CAShapeLayer()
maskLayer.path = path.CGPath
view.layer.mask = maskLayer
view.layer.masksToBounds = true
问题是您在针对当前设备调整视图大小之前获取视图的边界。它比稍后出现在屏幕上时要大,因此圆角矩形的右侧不在屏幕右侧。
您需要稍后创建 path
并设置 maskLayer.path
,在调整视图大小之后,这意味着在 运行 循环的布局阶段期间或之后。因此,要么将视图子类化并在视图的 layoutSubviews
方法中执行,要么在视图控制器的 viewDidLayoutSubviews
方法中执行。
如果您尝试为在 Storyboard 或 Xib 上设计的 View 设置 RoundingCorners,请设置角并MaskLayer.path进入以下方法。
override func viewDidLayoutSubviews() {
// here you can write the code...
}
Swift 3
对我有用!
override func layoutSubviews() {
super.layoutSubviews()
DispatchQueue.main.async {
self.containerView.roundCorners(corners: [.topRight,.topLeft], radius: 25)
self.containerView.layer.masksToBounds = true
}
self.layoutIfNeeded()
}
您可以在此处查看方法 "roundCorners":