ios - 边框用圆角裁剪?迅速
问题描述
我已经看到了一些关于这个主题的问题,但它们只是回答了其中一个问题。我从一侧绕过角落:
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.masksToBounds = true
self.layer.mask = mask
}
和实施:
detailsView.roundCorners(.allCorners, radius: 20)
然后,我尝试通过以下方式添加边框:
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness)
case UIRectEdge.bottom:
border.frame = CGRect(x:0, y: frame.height - thickness, width: frame.width, height:thickness)
case UIRectEdge.left:
border.frame = CGRect(x:0, y:0, width: thickness, height: frame.height)
case UIRectEdge.right:
border.frame = CGRect(x: frame.width - thickness, y: 0, width: thickness, height: frame.height)
default: do {}
}
border.backgroundColor = color.cgColor
addSublayer(border)
}
和实施:
detailsView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
解决方案
self.layer.masksToBounds = true
使边框裁剪。
您必须在另一个内部使用两个视图来解决此问题。还要为两个视图设置相同的框架。
在子视图中使用
childView.roundCorners(.allCorners, radius: 20)
在父视图中使用
parentView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
推荐阅读
- c - 如何通过标头中的宏定义控制makefile的行为?
- firebase - 检查用户是否使用 Google 或 Facebook 登录
- python - Create a column which elements are dictionaries which values are based in another columns of the dataframe
- python - 使用 Scrapy 进行网页抓取
- three.js - THREE.js - 将渐变颜色应用于导入的 GLTF 模型
- python - 如何获取 groupby 返回的系列的索引标签?
- python - C# python 控制台
- java - 如何在java处理中从字符串实例化类?
- swift - CoredataCloudkit 在提交到应用商店后无法在生产模式下工作
- python - 在循环中重新分配数组的最后一个索引