如何在 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)
})
}
我试图在单击小图像时使图像全屏显示。但是当我点击图片时,图片显示速度非常快。我可以添加一些过渡时间来延迟全屏图像显示吗?
@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)
})
}