Thi*_*oAM 6 calayer uiview popover swift uipopoverpresentationcontroller
我的应用程序中包含以下弹出窗口:
但我希望它看起来像经过编辑的图像(请注意,即使箭头也带有边框):
如今有可能吗?我已经在内尝试了以下方法UIViewController:
self.view.layer.borderColor = UIColor.white.cgColor
self.view.layer.borderWidth = 2
Run Code Online (Sandbox Code Playgroud)
但这对箭头无效。是否有任何转身?
我花了一段时间,但最终我能够解决这个问题。它从一个通用的 UiPopoverPresentationController 开始。目前还没有什么特别的。
该控制器将自身隐藏在viewWillAppear和之间viewDidAppear。因此,当弹出框成形时,我采用了它自己的蒙版路径,并用它来制作带有笔划的子图层。
override func viewWillLayoutSubviews() {
guard let shapeLayer = view.superview?.superview?.mask?.layer as? CAShapeLayer else { return }
let borderLayer = CAShapeLayer()
borderLayer.path = shapeLayer.path
borderLayer.lineWidth = 4
borderLayer.strokeColor = borderColor.cgColor
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.frame = shapeLayer.bounds
view.superview?.superview?.layer.addSublayer(borderLayer)
}
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样。
您是否尝试过将笔画设置为 UIBezierPath?在关闭 UIBezierPath 之前,您可以使用以下代码行执行此操作:
Color.purple.setStroke()
bezierPath.stroke()
Run Code Online (Sandbox Code Playgroud)
这是我在 Playground 上实现的结果:
但是,我意识到我无法更改它的宽度,因此我为边框创建了另一个图层。
let borderLayer = CAShapeLayer()
borderLayer.frame = self.bounds
borderLayer.path = bezierPath.cgPath
borderLayer.lineWidth = 6.0
borderLayer.strokeColor = UIColor.black.cgColor
borderLayer.fillColor = UIColor.clear.cgColor
self.layer.insertSublayer(borderLayer, at: 0)
Run Code Online (Sandbox Code Playgroud)
游乐场结果:
我认为这应该有所帮助,但如果没有关于如何实现形状的代码,我真的无法提出太多建议。您使用的是 UIBezierPath 还是 CGContext?
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |