[英]How to mask a UIButton in Swift?
我有一个复杂的堆栈视图,其中有许多排列好的标签和按钮。 当我试图掩盖整个堆栈视图以强制执行角半径时,堆栈视图中的按钮不再起作用(在内部触摸时不会触发动作选择器)。 我决定首先将问题简化为一个按钮和一个面具,如下所示:
let mask = UIView()
mask.translatesAutoresizingMaskIntoConstraints = false
mask.backgroundColor = .green
mask.layer.cornerRadius = 50
view.addSubview(mask)
mask.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
mask.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
mask.widthAnchor.constraint(equalToConstant: 200).isActive = true
mask.heightAnchor.constraint(equalToConstant: 100).isActive = true
btn = UIButton()
btn.backgroundColor = .red
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("More info", for: .normal)
btn.tintColor = .black
btn.addTarget(self, action: #selector(moreInfoTapped), for: .touchUpInside)
view.addSubview(btn)
btn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
btn.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
btn.widthAnchor.constraint(equalToConstant: 200).isActive = true
btn.heightAnchor.constraint(equalToConstant: 100).isActive = true
view.layoutSubviews()
view.setNeedsLayout()
btn.mask = mask
这会正确地掩盖按钮,但不幸的是,面具被放置在按钮的前面,因此永远不会注册按钮上的点击。
这是视图层次结构:
我错过了什么吗?
如果您指导我,我不知道您为什么要遮盖以实现圆角,我可以建议您更好的解决方案..但是对于您当前的情况,如果您关闭遮罩视图的用户交互..您的按钮将开始响应
mask.isUserInteractionEnabled = false
我将使用您在上面指定的按钮示例,因为我不知道您想对 stackview 做什么。
您将使用圆角半径为mask
设置样式。 然后您将button
添加到蒙版但具有透明背景并使其填充父级即mask
let maskView = UIView()
view.addSubview(maskView)
maskView.setCornerRadius() // implement this
maskView.setupConstraints() // implement this
let button = UIButton()
button.backgroundColor = .clear
maskView.addSubview(button)
button.fillParent() // implement this
相同的逻辑将适用于 stackview。 您只需要设置容器视图或蒙版视图的样式。
或者,您可以在容器视图中同时包含按钮和遮罩视图:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.