ios - iOS addLayer:如何布局正确?
问题描述
当向 viewController 的视图添加一些虚线时,通过添加子层。
这是代码:
class ViewController: UIViewController {
@IBOutlet weak var tmpLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
tmpLabel.layer.borderColor = UIColor.red.cgColor;
tmpLabel.layer.borderWidth = 2
tmpLabel.addDashedBorders(padding: 50, y: tmpLabel.bounds.size.height * 0.5)
// ......
}}
extension UIView {
func addDashedBorders( padding x: CGFloat, y : CGFloat) {
//Create a CAShapeLayer
let shapeLayer = CAShapeLayer()
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 2
shapeLayer.lineDashPattern = [2,3]
let path = CGMutablePath()
path.addLines(between: [CGPoint(x: x, y: y),
CGPoint(x: bounds.size.width * 0.5 - 50, y: y)])
path.addLines(between: [CGPoint(x: bounds.size.width * 0.5 + 50, y: y),
CGPoint(x: bounds.size.width - x, y: y)])
shapeLayer.path = path
layer.addSublayer(shapeLayer)
}
}
下图在 iPhoneX 中
代码是硬编码的,而且不好。
我想将子形状图层添加到标签正下方的视图中。
有代码
class ViewController: UIViewController {
@IBOutlet weak var tmpLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
tmpLabel.layer.borderColor = UIColor.red.cgColor;
tmpLabel.layer.borderWidth = 2
view.addDashedBorder(padding: 50, y: tmpLabel.frame.origin.y)
//...
}}
extension UIView {
func addDashedBorder( padding x: CGFloat, y : CGFloat) {
let shapeLayer = CAShapeLayer()
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 2
shapeLayer.lineDashPattern = [2,3]
let path = CGMutablePath()
path.addLines(between: [CGPoint(x: x, y: y),
CGPoint(x: bounds.size.width - x, y: y)])
shapeLayer.path = path
layer.addSublayer(shapeLayer)
}
}
我在iPhoneX上测试过,还有一段距离。
我试过view.safeAreaInsets
了,都是零。
我想念什么?
解决方案
推荐阅读
- amazon-cloudformation - AWS Cloudformation 中的多个自动生成的堆栈
- pdf - Rmarkdown knit pdf - 使用 *italic* 获取带下划线的文本而不是斜体(huxtable 问题?)
- java - 无法调用“javafx.scene.control.MenuButton.getScene()
- r - 多GPU模式不应该更快吗?以玩具为例
- javascript - Discord bot 不响应命令(Javascript)
- apache-spark - 将 spark Java 的最终数据集输出写入 s3
- composer-php - 作曲家需要“结论” - 如何阅读和修复
- ajax - 在 Ajax URL 中传递参数
- powershell - 为什么导出的文件是空白的?
- docker - 新浏览器无法在带有 Docker 的服务器上的 Robot Framework 中运行