如何在 Swift 3 中的 UITapGestureRecognizer 上添加过渡?

How to add transition on UITapGestureRecognizer in Swift 3?

我试图在单击小图像时使图像全屏显示。但是当我点击图片时,图片显示速度非常快。我可以添加一些过渡时间来延迟全屏图像显示吗?

@IBAction func uploadImgAction(_ sender: Any) {
    let tapgesture = UITapGestureRecognizer(target: self, action: #selector(DeleteJobViewController.tap))
    tapgesture.numberOfTapsRequired = 1
    reasonImg.addGestureRecognizer(tapgesture)
}

func tap(){
    print("tap")
    let newImageView = UIImageView(image: reasonImg.image)
    newImageView.frame = self.view.frame
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)
    self.view.addSubview(newImageView)
}

func dismissFullscreenImage(sender: UITapGestureRecognizer) {
    sender.view?.alpha = 1
    UIView.animate(withDuration: 1.5, animations: {
        sender.view?.alpha = 0
        sender.view?.removeFromSuperview()
    })
}

尝试将 self.view.addSubview(newImageView) 行替换为:

DispatchQueue.main.async {   
  UIView.transition(with: self.view, duration:0.6, options: UIViewAnimationOptions.showHideTransitionViews, animations: {
    self.view.addSubview(self.newImageView)
  }, completion: nil)
}

您也可以尝试在 运行 设置此代码之前设置 newImageView.alpha = 0

UIView.animate(withDuration: 1.5, animations: {
  self.newImageView.alpha = 1.0
})

为了制作消失效果的动画,在上面的代码中,将 addSubview 语句替换为 newImageView.removeFromSuperview()。 同样,您可以在设置 newImageView.alpha = 1:

后进行设置
func dismissFullscreenImage(sender: UITapGestureRecognizer) {
    UIView.animate(withDuration: 1.5, animations: {
          self.newImageView.alpha = 0
    })
}

编辑:

请在视图控制器的顶部添加 newImageView 作为 属性。

然后在你的 tap 函数中设置这个而不是 let newImageView:

self.newImageView = UIImageView(image: reasonImg.image)

现在如果你 运行 它应该编译的代码。

    yourImageView.alpha = 0

    *your addSubview in the middle

    UIView.animate(withDuration: 0.5, animations: {
    yourImageView.alpha = 1
    })

首先将您的图像设置为不可见,然后设置动画(在我的示例中为 0.5 秒)使其可见。

func tap() {
   print("tap")
   let newImageView = UIImageView(image: reasonImg.image)
   newImageView.frame = self.view.frame
   newImageView.transform = CGAffineTransform.init(scaleX: 0.0, y: 0.0)
   newImageView.backgroundColor = .black
   newImageView.contentMode = .scaleAspectFit
   newImageView.isUserInteractionEnabled = true
   let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
   newImageView.addGestureRecognizer(tap)
   self.view.addSubview(newImageView)

   UIView.animate(withDuration: 0.5, animations: {
            newImageView.transform = CGAffineTransform.init(scaleX: 1.0, y: 1.0)
   })
}