GIFピクチャ最適化スキームのロード
4285 ワード
前言
多くのプロジェクトはGIFのピクチャーをロードする必要があって、しかし直接UIImageViewを使ってロードして多くの問題が存在して、そこで資料を探して1つのGIFのDemoをロードして、構想の出所https://github.com/YouXianMing/Animationsリンクの中には、すでに解決策が示されており、Demoは機能を剥離し、簡単にカプセル化しただけです.
構想
FLAnimatedImageを使用してGIF画像をロードし、SDWebImageを再利用してキャッシュし、あまり話さずにコードを直接アップします.
使用方法
GIFView内部コード
効果図
ここでは、シミュレータテストでカートン現象が現れることに注意する必要があります.
宣言
ここで説明すると、簡単な剥離機能だけで、カプセル化されていて、みんなが使いやすいです.DemoアドレスはこちらGIFDemo
多くのプロジェクトはGIFのピクチャーをロードする必要があって、しかし直接UIImageViewを使ってロードして多くの問題が存在して、そこで資料を探して1つのGIFのDemoをロードして、構想の出所https://github.com/YouXianMing/Animationsリンクの中には、すでに解決策が示されており、Demoは機能を剥離し、簡単にカプセル化しただけです.
構想
FLAnimatedImageを使用してGIF画像をロードし、SDWebImageを再利用してキャッシュし、あまり話さずにコードを直接アップします.
使用方法
#import "GIFView.h"
GIFView,
GIFView *view = [[GIFView alloc] initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 300)];
view.url = @"http://upload-images.jianshu.io/upload_images/1979970-9d2b1cc945099612.gif?imageMogr2/auto-orient/strip";
[self.view addSubview:view];
GIFView内部コード
@interface GIFView()
/**GIF */
@property (nonatomic,weak)FLAnimatedImageView *gifImageView;
@end
@implementation GIFView
-(instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
[self initUI];
}
return self;
}
- (void)initUI
{
// FLAnimatedImageView, UIView
FLAnimatedImageView *gifImageView = [[FLAnimatedImageView alloc] init];
gifImageView.frame = self.frame;
[self addSubview:gifImageView];
_gifImageView = gifImageView;
}
-(void)setUrl:(NSString *)url
{
_url = url;
// GIF Data
NSData *gifImageData = [self imageDataFromDiskCacheWithKey:url];
// ,
if (gifImageData)
{
[self animatedImageView:_gifImageView data:gifImageData];
// ,
} else
{
__weak __typeof(self) weakSelf = self;
NSURL *newUrl = [NSURL URLWithString:url];
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:newUrl
options:0
progress:nil
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
[[[SDWebImageManager sharedManager] imageCache] storeImage:image
recalculateFromImage:NO
imageData:data
forKey:newUrl.absoluteString
toDisk:YES];
//
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf animatedImageView:_gifImageView data:data];
});
}];
}
}
// GIF
- (void)animatedImageView:(FLAnimatedImageView *)imageView data:(NSData *)data
{
FLAnimatedImage *gifImage = [FLAnimatedImage animatedImageWithGIFData:data];
imageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
imageView.animatedImage = gifImage;
imageView.alpha = 0.f;
[UIView animateWithDuration:1.f animations:^{
imageView.alpha = 1.f;
}];
}
//
- (NSData *)imageDataFromDiskCacheWithKey:(NSString *)key
{
NSString *path = [[[SDWebImageManager sharedManager] imageCache] defaultCachePathForKey:key];
return [NSData dataWithContentsOfFile:path];
}
効果図
ここでは、シミュレータテストでカートン現象が現れることに注意する必要があります.
宣言
ここで説明すると、簡単な剥離機能だけで、カプセル化されていて、みんなが使いやすいです.DemoアドレスはこちらGIFDemo