iOSにGif図をロードした正しい姿勢
3442 ワード
昨日何気なく1つの招待状を见て、どのようにgif図をロードすることを书いて、とても面倒な様子を感じて、もともととても简単な1件の事、どうしてこんなに复雑なことをしましたか?~~~
確かに、Appにはダイナミックマップ(gif図)が表示されるところがあります.それはユーザー体験にとって素晴らしいものです.絶対にAppのプラスポイントで、すぐにいくつかの階段を上っています.
But
iOSに表示される画像のコントロールはUIImageViewであることはよく知られていますが、UIImageViewはサポートされていません.gif形式の画像では、gif図を正しくロードするにはどうすればいいのでしょうか.
実は、よく考えてみると、UIImageViewが画像をロードできる以外に、他のシステムコントロールはありませんか?よく考えてみると、もちろんあります!!
に変換する必要がある. が必要であることがわかります.符号化フォーマット は必要ありません
では、
を使用コードの意味は明確で、私は注釈を書かないで比較的に肝心なのは に影響しませんそれを除去するのは
このスキームを使用すると、パフォーマンスの問題など、多くの問題が発生するかどうか、私自身が懸念しています.
gif図があって、1つのAppに彩りを添えることができますが、私は今までどのAppに大量のgif図が展示されているかを発見していません.一般的なプロジェクトには大量のgif図は存在しません(いくつかの主な目的はgif図を展示するAppを除く)、私自身のプロジェクトでも個別の場所でしか使われていないので、このような案を大量に使用することにどのような問題が発生するかは確定できません.
もちろん、これは唯一の案ではなく、必ずしも最高の案ではありません.もしあなたがこの案に不適切なところがあると思ったら、伝言を歓迎します.もしあなたがもっと良い案があれば、伝言を歓迎して共同で勉強します.ある拡張子を設定したファイルをアプリケーションで開く方式のタイプで、その拡張子ファイルがアクセスされるとブラウザは自動的に指定されたアプリケーションを使用して開く↩
確かに、Appにはダイナミックマップ(gif図)が表示されるところがあります.それはユーザー体験にとって素晴らしいものです.絶対にAppのプラスポイントで、すぐにいくつかの階段を上っています.
But
iOSに表示される画像のコントロールはUIImageViewであることはよく知られていますが、UIImageViewはサポートされていません.gif形式の画像では、gif図を正しくロードするにはどうすればいいのでしょうか.
実は、よく考えてみると、UIImageViewが画像をロードできる以外に、他のシステムコントロールはありませんか?よく考えてみると、もちろんあります!!
UIWebView
WebViewで
UIWebView
には、次のような方法があります.- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
data
はロードするバイナリデータ(NSData
)であり、gif図をロードするには、まず画像をNSData
タイプMIME
(Multipurpose Internet Mail Extensions)[1]多目的インターネットメール拡張タイプ.MIMEリファレンスマニュアルでは、image/gif
UTF-8
Url
ここではでは、
UIWebView
のこの方法でgif形式のピクチャをロードすることができます.基本的な考え方は、クラス(GifImageView)を作成してUIViewから継承し、GifImageViewでUIWebViewロードgif図を作成することです.これにより、gifをロードすることはUIViewをロードするようにeasyになります.コード#コード#
GifImageView.h
#import
@interface GifImageView : UIView
- (id)initWithFrame:(CGRect)frame GifImageName:(NSString*)gitImageName;
@end
GifImageView.m
#import "GifImageView.h"
@implementation GifImageView
- (id)initWithFrame:(CGRect)frame GifImageName:(NSString*)gitImageName{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
UIView *placeholdView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 1, 1)];
[self addSubview:placeholdView];
NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:gitImageName ofType:@"gif"]];
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
[webView setScalesPageToFit: YES];
[webView setBackgroundColor: [UIColor clearColor]];
[webView setOpaque: 0];
[self addSubview:webView];
[webView loadData:gifData MIMEType:@"image/gif" textEncodingName:@"" baseURL:[NSURL URLWithString:@""]];
[webView setUserInteractionEnabled:NO];
}
return self;
}
...
#import "GifImageView.h"
...
GifImageView *gifView = [[GifImageView alloc] initWithFrame:CGRectMake(50, 270, 175, 105) GifImageName:@"gifImage"];
[self.view addSubview:gifView];
...
webView
のインタラクションを閉じて、スクロール、長押しなどのイベントをトリガすることを防止して、しかしこれは親ビューのインタラクションView
で、もしあなたがそれを除去したいならば、あなたの洪水の力を使いましょう最後に書く
このスキームを使用すると、パフォーマンスの問題など、多くの問題が発生するかどうか、私自身が懸念しています.
gif図があって、1つのAppに彩りを添えることができますが、私は今までどのAppに大量のgif図が展示されているかを発見していません.一般的なプロジェクトには大量のgif図は存在しません(いくつかの主な目的はgif図を展示するAppを除く)、私自身のプロジェクトでも個別の場所でしか使われていないので、このような案を大量に使用することにどのような問題が発生するかは確定できません.
もちろん、これは唯一の案ではなく、必ずしも最高の案ではありません.もしあなたがこの案に不適切なところがあると思ったら、伝言を歓迎します.もしあなたがもっと良い案があれば、伝言を歓迎して共同で勉強します.