I have finished this tutorial.
but, the position of incoming photo is not correct.
this is my app screenshot.
my code…
func observeMessages() {
messageRef.observe(.childAdded , with: { snapshot in
print(snapshot.value)
if let dict = snapshot.value as? [String: AnyObject] {
let MediaType = dict["MediaType"] as! String
let senderId = dict["senderId"] as! String
let senderName = dict["senderName"] as! String
//--------------------------------------------------------------------------
//For ProfileIcon Display
self.observeUsers(id: senderId)
//--------------------------------------------------------------------------
//For Asynchronization
let startTime = CFAbsoluteTimeGetCurrent()
switch MediaType {
case "TEXT":
let text = dict["text"] as! String
self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, text: text))
print("Text message: \(CFAbsoluteTimeGetCurrent() - startTime)")
case "PHOTO":
let photo = JSQPhotoMediaItem(image: nil)
let fileUrl = dict["fileUrl"] as! String
let downloader = SDWebImageDownloader.shared()
downloader.downloadImage(with: NSURL(string: fileUrl)! as URL, options: [], progress: nil, completed: { (image, data, error, finished) in
print(Thread.current)
DispatchQueue.main.async{
photo?.image = image
self.collectionView.reloadData()
} //3
})
self.messages.append(JSQMessage(senderId: self.senderId, displayName: senderName, media: photo))
// JSQSystemSoundPlayer.jsq_playMessageSentSound()
// self.finishSendingMessage()
//print("Photo message: \(CFAbsoluteTimeGetCurrent() - startTime)")
if self.senderId == senderId {
photo?.appliesMediaViewMaskAsOutgoing = true
} else {
photo?.appliesMediaViewMaskAsOutgoing = false
}
case "VIDEO":
let fileUrl = dict["fileUrl"] as! String
let video = NSURL(string: fileUrl)
let videoItem = JSQVideoMediaItem(fileURL: video as URL!, isReadyToPlay: true)
self.messages.append(JSQMessage(senderId: self.senderId, displayName: senderName, media: videoItem))
print("Video message: \(CFAbsoluteTimeGetCurrent() - startTime)")
if self.senderId == senderId {
videoItem?.appliesMediaViewMaskAsOutgoing = true
} else {
videoItem?.appliesMediaViewMaskAsOutgoing = false
}
default:
print("unknown data type")
}
//---------------------------------------------------
self.collectionView.reloadData()
}
})
}