在MessageKit中轻按以放大图像视图-Swift
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MessageKit中轻按以放大图像视图-Swift相关的知识,希望对你有一定的参考价值。
我正在尝试在单元格中放大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()
}
}
答案
[不确定为什么我不赞成这个问题,但是我们找到的解决方案是,当我们获取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的主要内容,如果未能解决你的问题,请参考以下文章
在 Swiftui 中是不是有一种简单的方法可以通过捏合来放大图像?