I have added a layer AVPlayerLayer to the UIImageView and added the UITapGestureRecognizer to the UIImageView. And yes I have given the delegate and user interaction is also enabled for UIImageView. But the tap is not working.
Does anyone know about AVPlayerLayer in detail.
let imageViewTap = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
imageViewTap.numberOfTapsRequired = 1
imageView.addGestureRecognizer(imageViewTap)
let item = AVPlayerItem(asset: videoAsset)
videoPlayer = AVPlayer(playerItem: item)
videoPlayerLayer = AVPlayerLayer(player: videoPlayer)
videoPlayerLayer.frame = imageView.bounds
videoPlayerLayer.backgroundColor = UIColor.black.cgColor
imageView.layer.insertSublayer(videoPlayerLayer, at: 0)
@objc func imageViewTapped(){
print("my code here")
}
Check were have you added the AVPlayerLayer
. Add layer at index O
instead of adding it to the top.
Use insertSublayer(_:at:)
instead of addSublayer(_:)
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var imageView: UIImageView!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.imageView.isUserInteractionEnabled = true
self.addPlayer()
}
func addPlayer() {
if let url = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") {
let player = AVPlayer(url: url)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.imageView.bounds
playerLayer.videoGravity = .resizeAspect
self.imageView.layer.insertSublayer(playerLayer, at: 0)
player.play()
}
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapHandler(_:)))
tapGesture.delegate = self
self.imageView.addGestureRecognizer(tapGesture)
}
@objc func tapHandler(_ sender: UIGestureRecognizerDelegate) {
print("view tapped")
}
}
Now, whenever you tap on the view
, tapHandler(_:)
method will be called.
Don't forget to enable userInteraction
of imageView
manually.
self.imageView.isUserInteractionEnabled = true