[英]adding gesture recognizer to uiimage
我有图像滑块..我按照本教程进行操作: 使用UIPageControl Swift 4 XCode 9创建水平分页UIScrollView,它工作正常。
现在我想在这些图像上添加手势识别器..我试图这样做:
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!
}
这里有两个问题:
isUserInteractionEnabled
默认为false
我建议不要将该代码放置在Banner
类本身中,而不是将每个图像视图的isUserInteractionEnabled
分别设置为true
。 既然您似乎是从情节awakeFromNib
初始化的,那么使用awakeFromNib
函数应该可以正常工作:
class Banner: UIView {
@IBOutlet weak var img: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
img.isUserInteractionEnabled = true
}
}
在您的createSlides()
函数中,向每个视图添加单独的轻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())
UITapGestureRecognizer
必须仅用于单个视图,因此,如果要检测每个image
上的敲击,则需要为每个图像创建不同的UITapGestureRecognizer
。 阅读更多这里 。
而你需要设置isUserInteractionEnabled
到true
为每一个imageView
。
图像视图默认情况下会忽略用户事件。 如果希望图像视图也处理用户交互,请将其isUserInteractionEnabled
属性的值更改为true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.