试图用UIView屏蔽UIButton中的文本
使用iOS 13,swift 5 试图用UIButton来屏蔽文本,这样我就可以逐步显示。我创建了一个扩展,并设法在按钮上绘制视图,但似乎无法解决如何屏蔽显示的文本 例如,这段代码清楚地在按钮上创建了一个UIView,如下所示 这是代码,是UIButton的扩展试图用UIView屏蔽UIButton中的文本,uiview,uibutton,Uiview,Uibutton,使用iOS 13,swift 5 试图用UIButton来屏蔽文本,这样我就可以逐步显示。我创建了一个扩展,并设法在按钮上绘制视图,但似乎无法解决如何屏蔽显示的文本 例如,这段代码清楚地在按钮上创建了一个UIView,如下所示 这是代码,是UIButton的扩展 extension UIButton { func coverWord() { let frame = self.frame let hider = UIView(frame: CGRect(origin: CGP
extension UIButton {
func coverWord() {
let frame = self.frame
let hider = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 32, height: 64)))
hider.backgroundColor = UIColor.init(hue: 1, saturation: 1, brightness: 1, alpha: 1)
self.addSubview(hider)
self.bringSubviewToFront(hider)
}
现在我知道UIView位于按钮上方,因为如果我触摸左侧[红色],我将无法执行任何操作,但如果我触摸右侧[白色],它将按预期工作
但是,我如何才能用愚蠢的UIView来掩盖文本呢。我尝试在隐藏的UIView中创建一个形状,并使用此代码添加到其中
let layer = CAShapeLayer()
layer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 32, height: 64), cornerRadius: 0).cgPath
layer.fillColor = UIColor.green.cgColor
layer.fillMode = .forwards
hider.layer.addSublayer(layer)
这行得通,当然不行。不,它只是将[红色]部分涂成绿色。我仍然可以阅读按钮上愚蠢的文字。当然,我一贴出这个问题,我就明白了答案。我没有将其删除,而是将其张贴在这里,以供子孙后代使用:) UIButton中的文本是其中的UILabel。我需要将UIView添加到它以隐藏标签,并添加到按钮以在按下时屏蔽操作 Xcode中有一个视图显示了子层。这就是我所需要做的,以找出解决方案 这是第二个版本,就像一对窗帘,红色和绿色的颜色很合适
func splitWord() {
let sizer = self.frame.size
print("sizer",sizer)
let hider0 = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size:sizer))
let hider1 = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 18, height: 64)))
let hider2 = UIView(frame: CGRect(origin: CGPoint(x: 18, y: 0), size: CGSize(width: 18, height: 64)))
hider1.backgroundColor = UIColor.red
hider2.backgroundColor = UIColor.green
hider0.backgroundColor = UIColor.clear
let sub = self.titleLabel
let subs = sub?.frame.size
print("sub",subs)
sub?.insertSubview(hider1, at: 1)
sub?.insertSubview(hider2, at: 2)
self.insertSubview(hider0, at: 1)
UIView.animate(withDuration: 4, animations: {
hider1.center = CGPoint(x: -18, y: 0)
hider2.center = CGPoint(x: 54, y: 0)
}) { (_) in
hider0.removeFromSuperview()
}
}
显然,这里显示的尺寸-18和54与标签的尺寸有关,在我的例子中,标签上写着“下一个”。我知道还有改进的余地,但现在已经很晚了,该睡觉了
func splitWord() {
let sizer = self.frame.size
print("sizer",sizer)
let hider0 = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size:sizer))
let hider1 = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 18, height: 64)))
let hider2 = UIView(frame: CGRect(origin: CGPoint(x: 18, y: 0), size: CGSize(width: 18, height: 64)))
hider1.backgroundColor = UIColor.red
hider2.backgroundColor = UIColor.green
hider0.backgroundColor = UIColor.clear
let sub = self.titleLabel
let subs = sub?.frame.size
print("sub",subs)
sub?.insertSubview(hider1, at: 1)
sub?.insertSubview(hider2, at: 2)
self.insertSubview(hider0, at: 1)
UIView.animate(withDuration: 4, animations: {
hider1.center = CGPoint(x: -18, y: 0)
hider2.center = CGPoint(x: 54, y: 0)
}) { (_) in
hider0.removeFromSuperview()
}
}