実際には、これについてはわかりませんが、インターネットが利用可能かどうかを確認し、それに応じて画像を AsyncImageView にロードするという条件があります。インターネットから画像を読み込むと問題なく動作しますが、ローカル画像を AsyncImageView に読み込むことはできますか?
3 に答える
Nick Lockwoodの AsyncImageView のことですか?これは単なる UIImageView のカテゴリなので、既に画像がある場合は、画像のプロパティを直接設定してみませんか?
おそらく、以下があなたを助けるでしょう。
新しいファイルを作成する
UIImageView から継承
次のコードをコピーして貼り付けます。
輸入
「ASIHTTPRequest.h」をインポート
@interface AsynchronousImageView : UIImageView{ NSMutableData *data; UIActivityIndicatorView *activityIndicator; NSString *urlString; // 画像キャッシュ ディクショナリのキー ASIHTTPRequest *requestLocal; @property(nonatomic,assign) UIActivityIndicatorView *activityIndicator;
- (void)loadImageFromURLString:(NSString *)theUrlString;
- (void)loadImageFromNSURL:(NSURL *)theUrl;
- (void)loadImageFromFile:(NSString *)filePath; -(無効) showLoader; -(無効) stopLoader; @終わり
次に、.m ファイルに以下を貼り付けます。
import "AsynchronousImageView.h"
import "ASIDownloadCache.h"
@implementation AsynchronousImageView @synthesize activityIndicator;
- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 初期化コード //[self setContentMode:UIViewContentModeScaleAspectFit]; 自分自身を返します。} -(void)dealloc { if (requestLocal) { [requestLocal setDelegate:nil]; } requestLocal = nil; activityIndicator = nil; [スーパーdealloc]; } /* // drawRect のみをオーバーライド: カスタム描画を実行する場合。// 空の実装は、アニメーション中のパフォーマンスに悪影響を及ぼします。
- (void)drawRect:(CGRect)rect { // 描画コード } */ -(void) showLoader{ if(activityIndicator == nil){ activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [self addSubview:activityIndicator]; activityIndicator.frame = CGRectMake(self.bounds.size.width / 2.0f - activityIndicator.frame.size.width /2.0f, self.bounds.size.height / 2.0f - activityIndicator.frame.size.height /2.0f, activityIndicator.frame.size.width, activityIndicator.frame.size.height); [ActivityIndicator リリース]; } [activityIndicator startAnimating]; } -(void) stopLoader{ if(activityIndicator){ [activityIndicator stopAnimating]; [activityIndicator removeFromSuperview]; activityIndicator = nil; } }
- (void)loadImageFromFile:(NSString *)filePath { UIImage *img = [UIImage imageWithContentsOfFile:filePath]; [自己 setImage:img]; [セルフストップローダー]; }
- (void)loadImageFromURLString:(NSString *)theUrlString { / if (requestLocal) { [requestLocal setDelegate:nil]; } / requestLocal = nil; [自己 showLoader]; NSURL *url = [NSURL URLWithString:theUrlString]; requestLocal = [ASIHTTPRequest requestWithURL:url]; [requestLocal setDelegate:self]; [requestLocal setDidFailSelector:@selector(requestFailed)]; [requestLocal setDownloadCache:[ASIDownloadCache sharedCache]]; [requestLocal setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; [requestLocal startAsynchronous]; self.image = [UIImage imageNamed:@"playerDefault.png"]; }
-(void)loadImageFromNSURL:(NSURL *)theUrl { if (requestLocal) { [requestLocal setDelegate:nil]; } requestLocal = nil; requestLocal = [ASIHTTPRequest requestWithURL:theUrl]; [requestLocal setDelegate:self]; [requestLocal setDidFailSelector:@selector(requestFailed)]; [requestLocal startAsynchronous]; }
- (void)requestFinished:(ASIHTTPRequest *)request { requestLocal = nil; [セルフストップローダー]; UIImage *tempArt = [UIImage imageWithData:[リクエスト応答データ]]; if (tempArt) { self.image = tempArt; [データ公開]; データ = ゼロ; } -(void)requestFailed:(ASIHTTPRequest *)request{ requestLocal = nil; [セルフストップローダー]; [データ公開]; データ = ゼロ; } @終わり
次に、ViewComtroller .h で AsycnhronousImageView クラスをインポートし、これを記述します。
画像の IBOutlet を次のようにします。
IBOutlet AsycnhronousImageView *image;
UIImage ビューではなく、xib AsycnhronousImageView でクラスを変更します。
次のメソッドを呼び出します
- (void)loadImageFromFile:(NSString *)filePath;
実際、私はこの問題の解決策を得ました.私がしたことはこれだけでした
NSURL *theURL = [NSURL fileURLWithPath:@"/Users/gaurav/Library/Application Support/iPhone Simulator/5.0/Applications/AC6E9B2E-DB25-4933-A338-755B134E1A61/Documents/Attachment290_294_1344928691.jpeg"];
NSLog(@"local URl is::%@",theURL);
[self.asyncimageview loadImageFromURL:theURL];