tapgesture在collectionViewCell中不起作用,在故事板添加的单元格上都看不到任何UIElements

时间:2017-09-01 06:33:41

标签: ios swift uicollectionviewcell uitapgesturerecognizer

我有一个可以播放视频或显示和图像的collectionViewCell。现在以编程方式生成单元格中的元素。我添加了轻击手势以在视频播放时切换声音。手势识别器没有被调用。我试图在故事中放置一个按钮并采取行动,但也没有接到电话。然后,我尝试在单元格内放置一个视图,但也没有显示。

以下是我的带有点按手势的代码:

    import UIKit
    import AVKit
    import AVFoundation

    @IBDesignable class CHCollectionImageCell: UICollectionViewCell {


        // MARK: Properties
        var imgView: UIImageView! = UIImageView()
        var screenWidth:CGFloat = 0
        var screenHeight:CGFloat = 0
        var playerLayer: AVPlayerLayer!
        let tapOnCell = UITapGestureRecognizer(target: self, action:  #selector (CHCollectionImageCell.changeMuteRegimeVideo))


        // MARK: Functions
        override func awakeFromNib() {
            super.awakeFromNib()
        }

        func configureCell(insight: InsightModel) {

            imgView.removeFromSuperview()
            if playerLayer != nil {
                playerLayer.removeFromSuperlayer()
                playerLayer = nil
            }
            self.removeGestureRecognizer(tapOnCell)


            if insight.isVideo {
                guard let unwrappedVideoURLString = insight.videoURL,
                    let unwrappedVideoURL = URL(string: unwrappedVideoURLString) else {
                        return
                }


                let playerItem = AVPlayerItem(url: unwrappedVideoURL)
                let player = AVPlayer(playerItem: playerItem)
                playerLayer = AVPlayerLayer(player: player)
                playerLayer.frame = self.bounds
                player.isMuted = false
                layer.addSublayer(playerLayer)

                addGestureRecognizer(self.tapOnCell)
            } else {
                imgView.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.width)
                imgView.image = UIImage(named: "stone")
                imgView.contentMode = UIViewContentMode.scaleAspectFill
                imgView.clipsToBounds = true
                clipsToBounds = true
                addSubview(self.imgView)
            }



        }
       /* 
        @IBAction func tapToTurnOfSound(_ sender: Any) {
            if isInsightViedo{
                if let unwrappedPlayer = playerLayer.player {
                    unwrappedPlayer.isMuted = !unwrappedPlayer.isMuted
                }

            }
            //Even Tried adding view as below in the cell

            //let tapView = UIView()
            //tapView.backgroundColor = ColorCodes.appThemeColor
            //self.addSubview(tapView)
            //self.bringSubview(toFront: tapView)
            //tapView.addGestureRecognizer(tapOnCell)

        }
*/
        func configureCell() {
            imgView.removeFromSuperview()
            if playerLayer != nil {
                playerLayer.removeFromSuperlayer()
                playerLayer = nil
            }
            self.removeGestureRecognizer(tapOnCell)
            imgView.frame = CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.width)
            imgView.image = UIImage(named: "stone")
            imgView.contentMode = UIViewContentMode.scaleAspectFill
            imgView.clipsToBounds = true
            clipsToBounds = true

            addSubview(self.imgView)
        }

        func changeMuteRegimeVideo() {
            if let unwrappedPlayer = playerLayer.player {
                unwrappedPlayer.isMuted = !unwrappedPlayer.isMuted
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

我在应用程序中使用以下代码执行相同的操作:

let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(viewController.longPress(_:)))
longPressGesture.minimumPressDuration = 0.8
longPressGesture.delegate = self
collectionView.addGestureRecognizer(longPressGesture)

然后调用函数:

    func longPress(_ longPressGestureRecognizer: UILongPressGestureRecognizer) {

    if longPressGestureRecognizer.state == UIGestureRecognizerState.began {
      let touchPoint = longPressGestureRecognizer.location(in: collectionView)
 if eventsTableView.indexPathForRow(at: touchPoint) != nil {
 let index =  eventsTableView.indexPathForRow(at: touchPoint)//do whatever you want to do with this index 
}}}
  

你可以在这个功能中做任何你想做的事情。在我的情况下,我使用它来放大集合视图中的图像