Увеличение вида изображения при нажатии в MessageKit - Swift - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь увеличить изображение в MessageCollectionView в ячейке при его нажатии, что является стандартом в большинстве приложений для обмена сообщениями. Я успешно могу распознать касание пользователя в каждой ячейке и определить, является ли это фото или текстовой ячейкой, но моя функция imageTapped не срабатывает. Значение img, которое я передаю функции imageTapped внутри функции didTapMessage, выглядит как UIImageView, как и ожидалось. Кажется, что консольная печать внутри imageTapped не запускается, поэтому она никогда не входит в эту функцию. Может быть, я упускаю что-то простое здесь, но я чувствую, что это должно пройти через эту функцию!

Я использую Swift 5, iOS 13.2 и MessageKit.

Код:

// MARK: - MessageCellDelegate
// With help from:
// - https://github.com/MessageKit/MessageKit/issues/778
// - https://stackoverflow.com/questions/45536405/full-screen-an-image-inside-a-tableviewcell-when-tapped-swift
// - https://github.com/MessageKit/MessageKit/issues/261
extension RoomVC: MessageCellDelegate {
    func didTapMessage(in cell: MessageCollectionViewCell) {
        guard let indexPath = messagesCollectionView.indexPath(for: cell) else { return }
        guard let messagesDataSource = messagesCollectionView.messagesDataSource else { return }
        let message = messagesDataSource.messageForItem(at: indexPath, in: messagesCollectionView)
        switch message.kind {
            case .photo(let photoItem):
                log.info("Message is a photo.")
                if let img = photoItem.image{
                    self.imageTapped(image: img)
                }
            default:
                log.info("Message is not a photo.")
                break
        }
    }

    func imageTapped(image: UIImage){
        log.info("Entered the imageTapped function.")
        let newImageView = UIImageView(image: image)
        newImageView.frame = UIScreen.main.bounds
        newImageView.backgroundColor = .black
        newImageView.contentMode = .scaleAspectFit
        newImageView.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        newImageView.addGestureRecognizer(tap)
        self.view.addSubview(newImageView)
        self.navigationController?.isNavigationBarHidden = true
        self.tabBarController?.tabBar.isHidden = true
    }

    @objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
        self.navigationController?.isNavigationBarHidden = false
        self.tabBarController?.tabBar.isHidden = false
        sender.view?.removeFromSuperview()
    }
}
...