我正在处理我的观点,我遇到了在堆栈视图中围绕按钮获取阴影的问题。我所做的大部分工作都直接在故事板中。
以下是我用于将阴影应用于视图的方法
func addShadow(to view: UIView) {
view.layer.shadowColor = shadowColor
view.layer.shadowOpacity = shadowOpacity
view.layer.shadowOffset = shadowOffset
if let bounds = view.subviews.first?.bounds {
view.layer.shadowPath = UIBezierPath(rect: bounds).cgPath
}
view.layer.shouldRasterize = true
}
这就是我在ViewController.swift
for subview in self.view.subviews {
if subview.isKind(of: UIButton.self) && subview.tag == 1 {
addShadow(to: subview)
}
}
我知道问题源于堆栈视图和保存按钮的堆栈视图内部的UIView。 (self.view> UIStackView> UIView> [UIButton,UILabel])
我知道我可以通过for-loop
中的递归来做到这一点,但我想要更精确地优化性能,并且更愿意一次性添加阴影。
答案 0 :(得分:0)
您有几个选择:
你是正确的,因为按钮是堆栈视图上的一个视图,因此你的for循环不会直接点击按钮来为它添加阴影。
解决这个问题的最简单方法是递归方式,或类似的东西:
func addShadowsTo(subviews: [UIView]) {
for subview in subviews {
if subview.isKind(of: UIButton.self) && subview.tag == 1 {
addShadow(to: subview)
}
if let stackView = subview as? UIStackView {
addShadowToSubviews(subviews: stackView.subviews)
}
}
}
func viewDidload() {
super.viewDidLoad()
addShadowsTo(subviews: view.subviews)
}
如果您想要了解如何执行其他任何方式的说明,请发表评论。