Retrieving image sent with JSQMessage

筅森魡賤 提交于 2019-12-24 05:58:44

问题


I am using JSQMessage to create a chat application in Swift, basically my problem is when the user tap the photo I want the photo that is in the chat I want the photo to pop in fullscreen

I will add the steps of what I am trying to do it may be longer but easier to understand. (seems by the sender side, same is valid so the receiver as the image end up in the same array)

Sending the picture:

let sendMessage = JSQMessage(senderId: senderId, displayName: senderDisplayName, media: photoItem) <- Image I am interested is inside here
self.messages.append(sendMessage)
self.finishSendingMessage()

Great I can see the pic I sent on my screen and now I want to tap on it and I want it to popup full screen (for any of the old photos as well so I am using "didTapMessageBubbleAtIndexPath" here I have println(messages[indexPath.row]) here retrieve my JSQMessage object for that message and I can see it has my image on it (as the dump in the end) but I cannot retrieve it.

My question is how can I retrieve this image so I can display it in full screen?

Thanks in advance

_isMediaMessage char '\x01' '\x01'
_senderId __NSCFString * "7CjXUi6426" 0x7874b730
_senderDisplayName __NSCFString * "Test3" 0x7874b8b0
_date __NSDate * 2015-07-27 13:28:46 UTC 0x78707d20
_text id 0x0 0x00000000
_media JSQPhotoMediaItem * 0x78725d90 0x78725d90
JSQMediaItem JSQMediaItem

NSObject NSObject

_appliesMediaViewMaskAsOutgoing BOOL YES '\x01'
_cachedPlaceholderView UIView * nil 0x00000000
**_image UIImage * 0x7887de40 0x7887de40**
NSObject NSObject

_imageRef __NSCFType * 0x78e67260 0x78e67260
_scale float 1 1
_traitCollection UITraitCollection * 0x78743a10 0x78743a10
_imageAsset UIImageAsset * nil 0x00000000
_cachedImageView UIImageView * 0x788b61a0 0x788b61a0

回答1:


Looks like someone had a similar question that was answered here. Essentially, you can check if the JSQMessage object has media attached to it, then cast it to a JSQPhotoMediaItem and access the image from there.

Here's the Objective-C code from jessesquires's answer:

JSQMessage *message = [messages objectAtIndex:indexPath.row];

if (message.isMediaMessage) {
  id<JSQMessageMediaData> mediaItem = message.media;

  if ([mediaItem isKindOfClass:[JSQPhotoMediaItem class]]) {
    JSQPhotoMediaItem *photoItem = (JSQPhotoMediaItem *)mediaItem;
    UIImage *image = photoItem.image;
    // do stuff with the image
  }
}



回答2:


Swift 3

let message =  self.messages[indexPath.row]
    if message.isMediaMessage == true{
        let mediaItem =  message.media
        if mediaItem is JSQPhotoMediaItem{
            let photoItem = mediaItem as! JSQPhotoMediaItem
             let image:UIImage = photoItem.image //UIImage obtained. 
         }

    }


来源:https://stackoverflow.com/questions/31688224/retrieving-image-sent-with-jsqmessage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!