如何在Swift 3中的UITapGestureRecognizer上添加转换?

时间:2017-09-14 09:39:13

标签: swift uitapgesturerecognizer

当我点击小图片时,我正试图让图像视图全屏显示。但是当我点击图像时,图像显示速度非常快。我可以添加一些转换时间来延迟显示全屏图像吗?

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

3 个答案:

答案 0 :(得分:0)

尝试将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)

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

答案 1 :(得分:0)

    yourImageView.alpha = 0

    *your addSubview in the middle

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

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

答案 2 :(得分:0)

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