Modify MediaGalleryCellView to handle animated images and videos.

pull/1/head
Matthew Chen 7 years ago
parent 2c9a556786
commit c89bdd2a15

@ -242,15 +242,111 @@ public class MediaGalleryCellView: UIView {
return
}
if attachmentStream.isAnimated {
} else if attachmentStream.isVideo {
configureForAnimatedImage(attachmentStream: attachmentStream)
} else if attachmentStream.isImage {
loadStillImage(attachmentStream: attachmentStream)
configureForStillImage(attachmentStream: attachmentStream)
} else if attachmentStream.isVideo {
configureForVideo(attachmentStream: attachmentStream)
}
}
private func configureForAnimatedImage(attachmentStream: TSAttachmentStream) {
guard let cacheKey = attachmentStream.uniqueId else {
owsFailDebug("Attachment stream missing unique ID.")
return
}
let animatedImageView = YYAnimatedImageView()
// We need to specify a contentMode since the size of the image
// might not match the aspect ratio of the view.
animatedImageView.contentMode = .scaleAspectFill
// Use trilinear filters for better scaling quality at
// some performance cost.
animatedImageView.layer.minificationFilter = kCAFilterTrilinear
animatedImageView.layer.magnificationFilter = kCAFilterTrilinear
animatedImageView.backgroundColor = .white
addSubview(animatedImageView)
animatedImageView.autoPinEdgesToSuperviewEdges()
// [self addAttachmentUploadViewIfNecessary];
loadBlock = { [weak self] in
guard let strongSelf = self else {
return
}
guard let strongDelegate = strongSelf.delegate else {
return
}
if animatedImageView.image != nil {
return
}
let cachedValue = strongDelegate.tryToLoadCellMedia(loadCellMediaBlock: { () -> Any? in
guard let filePath = attachmentStream.originalFilePath else {
owsFailDebug("Attachment stream missing original file path.")
return nil
}
let animatedImage = YYImage(contentsOfFile: filePath)
return animatedImage
},
mediaView: animatedImageView,
cacheKey: cacheKey,
canLoadAsync: true)
guard let image = cachedValue as? YYImage else {
return
}
animatedImageView.image = image
}
unloadBlock = {
animatedImageView.image = nil
}
}
private func configureForStillImage(attachmentStream: TSAttachmentStream) {
guard let cacheKey = attachmentStream.uniqueId else {
owsFailDebug("Attachment stream missing unique ID.")
return
}
let stillImageView = UIImageView()
// We need to specify a contentMode since the size of the image
// might not match the aspect ratio of the view.
stillImageView.contentMode = .scaleAspectFill
// Use trilinear filters for better scaling quality at
// some performance cost.
stillImageView.layer.minificationFilter = kCAFilterTrilinear
stillImageView.layer.magnificationFilter = kCAFilterTrilinear
stillImageView.backgroundColor = .white
addSubview(stillImageView)
stillImageView.autoPinEdgesToSuperviewEdges()
// [self addAttachmentUploadViewIfNecessary];
loadBlock = { [weak self] in
guard let strongSelf = self else {
return
}
guard let strongDelegate = strongSelf.delegate else {
return
}
if stillImageView.image != nil {
return
}
let cachedValue = strongDelegate.tryToLoadCellMedia(loadCellMediaBlock: { () -> Any? in
return attachmentStream.thumbnailImageMedium(success: { (image) in
Logger.verbose("Loaded thumbnail")
stillImageView.image = image
}, failure: {
Logger.verbose("Could not load thumbnail")
})
},
mediaView: stillImageView,
cacheKey: cacheKey,
canLoadAsync: true)
guard let image = cachedValue as? UIImage else {
return
}
stillImageView.image = image
}
unloadBlock = {
stillImageView.image = nil
}
}
private func loadStillImage(attachmentStream: TSAttachmentStream) {
Logger.verbose("loadStillImage")
private func configureForVideo(attachmentStream: TSAttachmentStream) {
guard let cacheKey = attachmentStream.uniqueId else {
owsFailDebug("Attachment stream missing unique ID.")
return
@ -266,7 +362,14 @@ public class MediaGalleryCellView: UIView {
stillImageView.backgroundColor = .white
addSubview(stillImageView)
stillImageView.autoPinEdgesToSuperviewEdges()
// [self addAttachmentUploadViewIfNecessary];
// TODO: Hide during upload/download.
let videoPlayIcon = UIImage(named: "play_button")
let videoPlayButton = UIImageView(image: videoPlayIcon)
stillImageView.addSubview(videoPlayButton)
videoPlayButton.autoCenterInSuperview()
// [self addAttachmentUploadViewIfNecessary];
loadBlock = { [weak self] in
guard let strongSelf = self else {
return
@ -285,10 +388,9 @@ public class MediaGalleryCellView: UIView {
Logger.verbose("Could not load thumbnail")
})
},
mediaView: stillImageView,
cacheKey: cacheKey,
canLoadAsync: true)
Logger.verbose("cachedValue: \(cachedValue)")
mediaView: stillImageView,
cacheKey: cacheKey,
canLoadAsync: true)
guard let image = cachedValue as? UIImage else {
return
}

Loading…
Cancel
Save