0

晚上好,

我一直试图弄清楚当我按下按钮时如何淡化屏幕,以便为子视图提供更清晰的外观。我研究了 zPositions,我认为在我的代码中实现这个功能会有所帮助。当我运行我的代码时,整个屏幕都会消失。我希望在背景褪色时出现一个圆形进度环。我将展示一张图片和我的代码。先感谢您。

圆环,我愿凌驾于褪色的画面之上。

 @objc func handlePost() {
    let center = view.center
    let trackLayer = CAShapeLayer()
    let circularPath = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)
    blackScreen=UIView(frame: self.view.bounds)
    blackScreen.backgroundColor=UIColor(white: 0, alpha: 0.8)
    blackScreen.isHidden=true
    self.navigationController?.view.addSubview(blackScreen)
    blackScreen.layer.zPosition=50
    blackScreen.isHidden=false
    self.view.backgroundColor = UIColor.white
    trackLayer.path = circularPath.cgPath
    trackLayer.strokeColor = UIColor.lightGray.cgColor
    trackLayer.lineWidth = 10
    trackLayer.fillColor = UIColor.clear.cgColor
    trackLayer.lineCap = kCALineCapRound
    // The zPosition is supposed to bring this layer to the front. 
    trackLayer.zPosition = 100
    shapeLayer.path = circularPath.cgPath
    shapeLayer.strokeColor = GREEN_Theme.cgColor
    shapeLayer.lineWidth = 10
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.lineCap = kCALineCapRound
    shapeLayer.strokeEnd = 0
    // The zPosition is supposed to bring this layer to the front. 
    shapeLayer.zPosition = 100
    let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
    basicAnimation.toValue = 1
    basicAnimation.duration = 2
    basicAnimation.fillMode = kCAFillModeForwards
    basicAnimation.isRemovedOnCompletion = false
    shapeLayer.add(basicAnimation, forKey: "dataSearch")
    shapeLayer.removeAnimation(forKey: "finished")
    view.layer.addSublayer(trackLayer)
    view.layer.addSublayer(shapeLayer)

}

4

1 回答 1

0

再次花费数小时处理我的代码后,我设法找出了自己的答案。在我有之前

     self.navigationController?.view.addSubview(blackScreen)
  // (faded screen)

我只需要添加

    self.view.addSubview(blackScreen)

把它变成一个层,这样我就可以用我的 zPosition 来操作它。

于 2018-11-21T04:26:48.503 回答