ifish/Ifish/controllers/IfishTabControllers/消息/IfishIMFiles/Sessions/ViewController/Gallery/NTESGalleryViewController.m

144 lines
4.4 KiB
Objective-C

//
// NTESGalleryViewController.m
// NIMDemo
//
// Created by ght on 15-2-3.
// Copyright (c) 2015年 Netease. All rights reserved.
//
#import "NTESGalleryViewController.h"
#import "UIImageView+WebCache.h"
#import "UIView+NTES.h"
#import "NTESSnapchatAttachment.h"
#import "NTESSessionUtil.h"
#import "Toast+UIView.h"
@implementation NTESGalleryItem
@end
@interface NTESGalleryViewController ()
@property (strong, nonatomic) IBOutlet UIImageView *galleryImageView;
@property (nonatomic,strong) NTESGalleryItem *currentItem;
@end
@implementation NTESGalleryViewController
- (instancetype)initWithItem:(NTESGalleryItem *)item
{
if (self = [super initWithNibName:@"NTESGalleryViewController"
bundle:nil])
{
_currentItem = item;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
_galleryImageView.contentMode = UIViewContentModeScaleAspectFit;
NSURL *url = [NSURL URLWithString:_currentItem.imageURL];
[_galleryImageView sd_setImageWithURL:url
placeholderImage:[UIImage imageWithContentsOfFile:_currentItem.thumbPath]
options:SDWebImageRetryFailed];
if ([_currentItem.name length])
{
self.navigationItem.title = _currentItem.name;
}
}
@end
@interface SingleSnapView : UIImageView
@property (nonatomic,strong) UIProgressView *progressView;
@property (nonatomic,copy) NIMCustomObject *messageObject;
- (instancetype)initWithFrame:(CGRect)frame messageObject:(NIMCustomObject *)object;
- (void)setProgress:(CGFloat)progress;
@end
@implementation NTESGalleryViewController(SingleView)
+ (UIView *)alertSingleSnapViewWithMessage:(NIMMessage *)message baseView:(UIView *)view{
NIMCustomObject *messageObject = (NIMCustomObject *)message.messageObject;
if (![messageObject isKindOfClass:[NIMCustomObject class]] || ![messageObject.attachment isKindOfClass:[NTESSnapchatAttachment class]]) {
return nil;
}
SingleSnapView *galleryImageView = [[SingleSnapView alloc] initWithFrame:[UIScreen mainScreen].bounds messageObject:messageObject];
galleryImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
galleryImageView.backgroundColor = [UIColor blackColor];
galleryImageView.contentMode = UIViewContentModeScaleAspectFit;
galleryImageView.userInteractionEnabled = NO;
[view presentView:galleryImageView animated:YES complete:^{
NTESSnapchatAttachment *attachment = (NTESSnapchatAttachment *)messageObject.attachment;
if ([[NSFileManager defaultManager] fileExistsAtPath:attachment.filepath isDirectory:nil]) {
galleryImageView.image = [UIImage imageWithContentsOfFile:attachment.filepath];
galleryImageView.progress = 1.0;
}else{
[NTESGalleryViewController downloadImage:attachment.url imageView:galleryImageView];
}
}];
return galleryImageView;
}
+ (void)downloadImage:(NSString *)url imageView:(SingleSnapView *)imageView{
__weak typeof(imageView) wImageView = imageView;
[imageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil options:SDWebImageCacheMemoryOnly progress:^(NSInteger receivedSize, NSInteger expectedSize) {
dispatch_async_main_safe(^{
wImageView.progress = (CGFloat)receivedSize / expectedSize;
});
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (error) {
[wImageView makeToast:@"下载图片失败"
];
}else{
wImageView.progress = 1.0;
}
}];
}
@end
@implementation SingleSnapView
- (instancetype)initWithFrame:(CGRect)frame messageObject:(NIMCustomObject *)object{
self = [super initWithFrame:frame];
if (self) {
_messageObject = object;
_progressView = [[UIProgressView alloc] initWithFrame:CGRectZero];
CGFloat width = 200.f * UISreenWidthScale;
_progressView.width = width;
_progressView.hidden = YES;
[self addSubview:_progressView];
}
return self;
}
- (void)setProgress:(CGFloat)progress{
[self.progressView setProgress:progress];
[self.progressView setHidden:progress>0.99];
}
- (void)layoutSubviews{
[super layoutSubviews];
self.progressView.centerY = self.height *.5;
self.progressView.centerX = self.width *.5;
}
@end