检索使用 JSQMessage 发送的图像
Retrieving image sent with JSQMessage
我正在使用 JSQMessage 在 Swift 中创建聊天应用程序,基本上我的问题是当用户点击照片时我想要聊天中的照片我希望照片全屏弹出
我将添加我正在尝试执行的步骤,它可能会更长但更容易理解。 (似乎在发送方,同样有效,因此接收方作为图像最终在同一个数组中)
发送图片:
let sendMessage = JSQMessage(senderId: senderId, displayName: senderDisplayName, media: photoItem) <- Image I am interested is inside here
self.messages.append(sendMessage)
self.finishSendingMessage()
太好了,我可以在屏幕上看到我发送的图片,现在我想点击它,我希望它弹出全屏(对于任何旧照片,所以我正在使用 "didTapMessageBubbleAtIndexPath"
这里我 println(messages[indexPath.row])
在这里检索该消息的 JSQMessage 对象,我可以看到它上面有我的图像(作为最后的转储)但我无法检索它。
我的问题是如何检索此图像以便全屏显示它?
提前致谢
_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
看起来有人回答了类似的问题 here。本质上,您可以检查 JSQMessage
对象是否附加了媒体,然后将其投射到 JSQPhotoMediaItem
并从那里访问图像。
这是来自 jessesquires 的回答的 Objective-C 代码:
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
}
}
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.
}
}
我正在使用 JSQMessage 在 Swift 中创建聊天应用程序,基本上我的问题是当用户点击照片时我想要聊天中的照片我希望照片全屏弹出
我将添加我正在尝试执行的步骤,它可能会更长但更容易理解。 (似乎在发送方,同样有效,因此接收方作为图像最终在同一个数组中)
发送图片:
let sendMessage = JSQMessage(senderId: senderId, displayName: senderDisplayName, media: photoItem) <- Image I am interested is inside here
self.messages.append(sendMessage)
self.finishSendingMessage()
太好了,我可以在屏幕上看到我发送的图片,现在我想点击它,我希望它弹出全屏(对于任何旧照片,所以我正在使用 "didTapMessageBubbleAtIndexPath"
这里我 println(messages[indexPath.row])
在这里检索该消息的 JSQMessage 对象,我可以看到它上面有我的图像(作为最后的转储)但我无法检索它。
我的问题是如何检索此图像以便全屏显示它?
提前致谢
_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
看起来有人回答了类似的问题 here。本质上,您可以检查 JSQMessage
对象是否附加了媒体,然后将其投射到 JSQPhotoMediaItem
并从那里访问图像。
这是来自 jessesquires 的回答的 Objective-C 代码:
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
}
}
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.
}
}