试图用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

使用iOS 13,swift 5

试图用UIButton来屏蔽文本,这样我就可以逐步显示。我创建了一个扩展,并设法在按钮上绘制视图,但似乎无法解决如何屏蔽显示的文本

例如,这段代码清楚地在按钮上创建了一个UIView,如下所示

这是代码,是UIButton的扩展

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()
  }
}