在MessageKit中轻按以放大图像视图-Swift

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MessageKit中轻按以放大图像视图-Swift相关的知识,希望对你有一定的参考价值。

我正在尝试在单元格中放大MessageCollectionView中的图像,这是大多数消息传递应用程序中的标准设置。我能够成功识别用户在每个单元格上的轻击,并确定它是照片单元格还是文本单元格,但是我的imageTapped功能似乎没有触发。我正在传递给img函数内部的imageTapped函数的didTapMessage值,看起来像是预期的UIImageViewimageTapped内部的控制台打印似乎没有被触发,因此它永远不会进入该功能。也许我在这里缺少一些简单的东西,但是我觉得应该通过该功能!

我正在使用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()
    }
}
答案

[不确定为什么我不赞成这个问题,但是我们找到的解决方案是,当我们获取downloadUrl时,我们将图像以nil的形式传递给url而不是图像。

var kind: MessageKind {
        if let url = downloadURL {
            - return .photo(ImageMediaType(url: url, image: nil, placeholderImage: #imageLiteral(resourceName: "placeholder"), size: CGSize(width: 150, height: 150)))
            + return .photo(ImageMediaType(url: url, image: image, placeholderImage: #imageLiteral(resourceName: "placeholder"), size: CGSize(width: 150, height: 150)))
        }
        return .text(content)
    }

以上是关于在MessageKit中轻按以放大图像视图-Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FlutterDriver 关闭对话框

用户点击时在 MessageKit 中打开图像

在 Swiftui 中是不是有一种简单的方法可以通过捏合来放大图像?

SwiftUI:再次轻按选定的选项卡时,弹出到根视图

如何在 Android 的滚动视图中放大/更改子图像视图尺寸以使图像全尺寸

JAVA:放大/缩小时,圆圈被绑定到图像视图中的一个位置