IOSがUIImageViewを使用してgifアニメーションの例を表示する
2つのオープンソースコードが使用されています
1.SDWebImage非同期読取画像データ2.SCGifExample gifアニメーションコントロール
このプロジェクトはSCGifExampleに基づいて修正されました
最近SDWebImageがアップグレードされたばかりで、私もこれによって私のコードを修正しました.gif部分を外して皆さんと画像の拡大縮小部分を共有します.私はまだジェスチャーを使っています.以下の方法はあまり使いにくいと思います.もし皆さんがもっと良いアルゴリズムがあれば、画像の拡大縮小効果を共有してください.
SDWebImage内部でも実际にはダイナミックな画像読み取りが可能で、私のプロジェクトは时间がなくて変更することができて、兴味があるのは自分で変更してImgeに戻る时にimageArrayに戻ることができて、コードはSCGifExampleの実现を学ぶことができます
SDWebImageにSDWebImageManagerDelegate関数を4つ追加
- (void)webImageManager:(SDWebImageManager *)imageManager ActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView didFailWithError:(NSError *)error; - (void)webImageManager:(SDWebImageManager *)imageManager ActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView didFinishWithImage:(UIImage *)image drawRoundedRect:(BOOL)bDraw; //SDImageCacheにデータがあります-(void)webImageManager:(SDWebImageManager*)imageManager Activity IndicatorView:(UIActivity IndicatorView*)activityIndicatorView:(NSString*)fileName didFinishWithImage:(UIImge*)image drawRoundedRect:(BOOL)bDraw;//SDImageCacheにはデータがなく、SDWebImageDownloaderダウンロード取得-(void)webImageManager:(SDWebImageManager*)imageManager Activity IndicatorView:(UIActivity IndicatorView*)activityIndicatorView ImageData:(NSData*)imageData didFinishWithImage:(UIImage*)image drawRoundRect:(BOOL)bDraw;(UIActivityIndicatorView*)activityIndicatorViewは、ImageViewでSDWebImageManagerが呼び出されたときにロードされたダウンロードステータスを表示します.
typedef enum { SDWebImageRetryFailed = 1 << 0, SDWebImageLowPriority = 1 << 1, SDWebImageCacheMemoryOnly = 1 << 2, SDWebImageRoundedRect = 1 << 3 } SDWebImageOptions; には、フィレット画像を表示するかどうかを示すSDWebImageRoundedRectが追加されています.
SCGifExampleは2つの関数を追加しました
- (BOOL)setGIFFile:(NSString*)gifFilePath; - (BOOL)setGIFData:(NSData*)gifImageData;
ステータスバーとツールバーはまだ終わっていません.ステータスバーはカスタマイズしたほうがいいです.
2012-03-16:1つの問題を発見しました.UIActivityIndicatorViewを自分で修正してください.繰り返し作成する可能性があります.できることは下を見る必要はありません.私はパッチを打っただけです.次のように修正しました.
3月23日:
SDWebImageの内部に問題があり、URLリンクがimageでない場合はimage画像データを返します.
可以在
NS_INLINE UIImage *SDScaledImageForPath(NSString *path, NSData *imageData)
関数にimageDataの判断を追加し、ピクチャデータかどうか
非常時にnilを返す
- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection
関数の値がdelegate呼び出しperformSelector:@selector(imageDownloader:didFailWithError:)を返すと判断します.
ダウンロードアドレス:ダウンロードをクリック
新版:ダウンロードをクリック
最近SDWebImageの変更が頻繁で、コードも統合してdelegateを簡略化しました.
Button部分の変更が追加され、前景背景の異なる状態の画像を設定できます
私は工事をやめて、SDWebImage部分だけアップロードします.
ダウンロード:SDWebImage_2.6_b78238802d.zip
久しぶりに新しいSDWebImageに大きな問題があり、ダウンロードスレッドがランダムにブロックされ、画像がダウンロードできなくなります.
古いバージョンのそれは問題なくgifを増やせばいいです.
gifアルゴリズムを追加:
sd_isGIFは新版SDWebImageにあります
1.SDWebImage非同期読取画像データ2.SCGifExample gifアニメーションコントロール
このプロジェクトはSCGifExampleに基づいて修正されました
最近SDWebImageがアップグレードされたばかりで、私もこれによって私のコードを修正しました.gif部分を外して皆さんと画像の拡大縮小部分を共有します.私はまだジェスチャーを使っています.以下の方法はあまり使いにくいと思います.もし皆さんがもっと良いアルゴリズムがあれば、画像の拡大縮小効果を共有してください.
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return imageView;
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
imageView.center = scrollView.center;
if (imageView.frame.origin.x < 0)
{
setFrameX(imageView, 0);
}
if (imageView.frame.origin.y < 0)
{
setFrameY(imageView, 0);
}
}
SDWebImage内部でも実际にはダイナミックな画像読み取りが可能で、私のプロジェクトは时间がなくて変更することができて、兴味があるのは自分で変更してImgeに戻る时にimageArrayに戻ることができて、コードはSCGifExampleの実现を学ぶことができます
SDWebImageにSDWebImageManagerDelegate関数を4つ追加
- (void)webImageManager:(SDWebImageManager *)imageManager ActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView didFailWithError:(NSError *)error; - (void)webImageManager:(SDWebImageManager *)imageManager ActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView didFinishWithImage:(UIImage *)image drawRoundedRect:(BOOL)bDraw; //SDImageCacheにデータがあります-(void)webImageManager:(SDWebImageManager*)imageManager Activity IndicatorView:(UIActivity IndicatorView*)activityIndicatorView:(NSString*)fileName didFinishWithImage:(UIImge*)image drawRoundedRect:(BOOL)bDraw;//SDImageCacheにはデータがなく、SDWebImageDownloaderダウンロード取得-(void)webImageManager:(SDWebImageManager*)imageManager Activity IndicatorView:(UIActivity IndicatorView*)activityIndicatorView ImageData:(NSData*)imageData didFinishWithImage:(UIImage*)image drawRoundRect:(BOOL)bDraw;(UIActivityIndicatorView*)activityIndicatorViewは、ImageViewでSDWebImageManagerが呼び出されたときにロードされたダウンロードステータスを表示します.
typedef enum { SDWebImageRetryFailed = 1 << 0, SDWebImageLowPriority = 1 << 1, SDWebImageCacheMemoryOnly = 1 << 2, SDWebImageRoundedRect = 1 << 3 } SDWebImageOptions; には、フィレット画像を表示するかどうかを示すSDWebImageRoundedRectが追加されています.
SCGifExampleは2つの関数を追加しました
- (BOOL)setGIFFile:(NSString*)gifFilePath; - (BOOL)setGIFData:(NSData*)gifImageData;
ステータスバーとツールバーはまだ終わっていません.ステータスバーはカスタマイズしたほうがいいです.
2012-03-16:1つの問題を発見しました.UIActivityIndicatorViewを自分で修正してください.繰り返し作成する可能性があります.できることは下を見る必要はありません.私はパッチを打っただけです.次のように修正しました.
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options
{
SDWebImageManager *manager = [SDWebImageManager sharedManager];
// Remove in progress downloader from queue
[manager cancelForDelegate:self];
self.image = placeholder;
if (url)
{
UIActivityIndicatorView *progressInd = (UIActivityIndicatorView *)[self viewWithTag:30326];
if (progressInd == nil)
{
progressInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
progressInd.tag = 30326;
[progressInd startAnimating];
[self addSubview:progressInd size:CGSizeMake(37, 37)];
[progressInd release];
}
//[manager downloadWithURL:url delegate:self options:options];
[manager downloadWithURL:url ActivityIndicatorView:progressInd delegate:self options:options];
}
}
3月23日:
SDWebImageの内部に問題があり、URLリンクがimageでない場合はimage画像データを返します.
可以在
NS_INLINE UIImage *SDScaledImageForPath(NSString *path, NSData *imageData)
関数にimageDataの判断を追加し、ピクチャデータかどうか
非常時にnilを返す
- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection
関数の値がdelegate呼び出しperformSelector:@selector(imageDownloader:didFailWithError:)を返すと判断します.
ダウンロードアドレス:ダウンロードをクリック
新版:ダウンロードをクリック
最近SDWebImageの変更が頻繁で、コードも統合してdelegateを簡略化しました.
Button部分の変更が追加され、前景背景の異なる状態の画像を設定できます
私は工事をやめて、SDWebImage部分だけアップロードします.
ダウンロード:SDWebImage_2.6_b78238802d.zip
久しぶりに新しいSDWebImageに大きな問題があり、ダウンロードスレッドがランダムにブロックされ、画像がダウンロードできなくなります.
古いバージョンのそれは問題なくgifを増やせばいいです.
gifアルゴリズムを追加:
sd_isGIFは新版SDWebImageにあります
- (BOOL)animatedGIFWithData:(NSData *)data
{
if (!data)
{
return NO;
}
if (![data sd_isGIF])
{
return NO;
}
CGImageSourceRef source = CGImageSourceCreateWithData(( CFDataRef)data, NULL);
size_t count = CGImageSourceGetCount(source);
NSMutableArray *images = [NSMutableArray array];
NSTimeInterval duration = 0.0f;
for (size_t i = 0; i < count; i++)
{
CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
NSDictionary *frameProperties = CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(source, i, NULL));
duration += [[[frameProperties objectForKey:(NSString*)kCGImagePropertyGIFDictionary] objectForKey:(NSString*)kCGImagePropertyGIFDelayTime] doubleValue];
[images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
CGImageRelease(image);
}
CFRelease(source);
if (!duration)
{
duration = (1.0f/10.0f)*count;
}
if (images.count > 0)
{
[self setImage:[images objectAtIndex:0]];
[self setAnimationImages:images];
[self setAnimationDuration:duration];
[self setAnimationRepeatCount:0];
[self startAnimating];
return YES;
}
return NO;
}