向 uiimage 添加手势识别器
adding gesture recognizer to uiimage
我有图像滑块..我按照本教程进行操作:Create a Horizontal Paging UIScrollView with UIPageControl Swift 4 XCode 9并且效果很好..
现在我想在这些图像上添加手势识别器..我试着这样做:
func createSlides() -> [banner] {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapped))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(tapGesture)
let slide2:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide2.img.image = UIImage(named: "bannerex")
slide2.img.addGestureRecognizer(tapGesture)
let slide3:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide3.img.image = UIImage(named: "bannerex")
slide3.img.addGestureRecognizer(tapGesture)
return [slide1, slide2, slide3]
}
@objc func tapped(_ sender: UITapGestureRecognizer){
print("tapped")
print(pageControl.currentPage)
}
但它不起作用,不会发生任何事情。
如何解决这个问题?
import UIKit
class banner: UIView {
@IBOutlet weak var img: UIImageView!
}
Image views 默认忽略用户事件。如果您希望图像视图也处理用户交互,请将其 isUserInteractionEnabled
属性 的值更改为 true。
UITapGestureRecognizer
只能与单个视图一起使用,因此如果要检测每个 image
上的点击,则需要为每个图像创建不同的 UITapGestureRecognizer
。阅读更多 HERE.
你需要为每个 imageView
设置 isUserInteractionEnabled
到 true
。
这里有两个问题:
isUserInteractionEnabled
默认为false
- 您必须为每个图像视图分配一个单独的手势识别器
解决方案
我建议不要将每个图像视图的 isUserInteractionEnabled
设置为 true
,而是将该代码放在 Banner
class 本身中。由于您似乎是从情节提要中初始化它,因此使用 awakeFromNib
函数应该可以正常工作:
class Banner: UIView {
@IBOutlet weak var img: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
img.isUserInteractionEnabled = true
}
}
在您的 createSlides()
函数中,为每个视图添加一个单独的点击手势:
let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))
甚至更好的缩放和无代码冗余:
function tap() -> UITapGestureRecognizer {
return UITapGestureRecognizer(target: self, action: #selector(tapped))
}
let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(tap())
我有图像滑块..我按照本教程进行操作:Create a Horizontal Paging UIScrollView with UIPageControl Swift 4 XCode 9并且效果很好..
现在我想在这些图像上添加手势识别器..我试着这样做:
func createSlides() -> [banner] {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapped))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(tapGesture)
let slide2:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide2.img.image = UIImage(named: "bannerex")
slide2.img.addGestureRecognizer(tapGesture)
let slide3:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide3.img.image = UIImage(named: "bannerex")
slide3.img.addGestureRecognizer(tapGesture)
return [slide1, slide2, slide3]
}
@objc func tapped(_ sender: UITapGestureRecognizer){
print("tapped")
print(pageControl.currentPage)
}
但它不起作用,不会发生任何事情。
如何解决这个问题?
import UIKit
class banner: UIView {
@IBOutlet weak var img: UIImageView!
}
Image views 默认忽略用户事件。如果您希望图像视图也处理用户交互,请将其 isUserInteractionEnabled
属性 的值更改为 true。
UITapGestureRecognizer
只能与单个视图一起使用,因此如果要检测每个 image
上的点击,则需要为每个图像创建不同的 UITapGestureRecognizer
。阅读更多 HERE.
你需要为每个 imageView
设置 isUserInteractionEnabled
到 true
。
这里有两个问题:
isUserInteractionEnabled
默认为false
- 您必须为每个图像视图分配一个单独的手势识别器
解决方案
我建议不要将每个图像视图的 isUserInteractionEnabled
设置为 true
,而是将该代码放在 Banner
class 本身中。由于您似乎是从情节提要中初始化它,因此使用 awakeFromNib
函数应该可以正常工作:
class Banner: UIView {
@IBOutlet weak var img: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
img.isUserInteractionEnabled = true
}
}
在您的 createSlides()
函数中,为每个视图添加一个单独的点击手势:
let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))
甚至更好的缩放和无代码冗余:
function tap() -> UITapGestureRecognizer {
return UITapGestureRecognizer(target: self, action: #selector(tapped))
}
let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(tap())