遅延
答えて
を確認してくださいしようとしているものを
2.toチェック。あなたはそれを実装する方法に応じて(「ねえ、今私はあなたにXXXのためにイメージを得ました」。 あなたはロードすることができますこの方法では、あなたがイメージを作るために、デリゲートメソッドを伝えるならば、それはバックグラウンドでそれを行うと、あなたの視野を伝えることができることを意味あなたのビューその中に電子書籍でだけは、デフォルトの背景と本の真ん中にローダーを示した。画像が完了したら、あなたは正しいイメージを持つ書籍のビューを更新し、ローダーを削除します。 多くのようなどのようにAppleのiBookは、他の優れたアプリケーションは、(あなたの必要性に適応し、まだのUITableViewControllerで使用するため)私自身のプロジェクトの一つから
例を行います。
BookDelegate.h
#import <Foundation/Foundation.h>
@class Book;
@protocol BookDelegate <NSObject>
@optional
- (void)didRecieveImageForBook:(NSString*)imagePath indexPath:(NSIndexPath*)indexPath;
@end
Book.h
#import <Foundation/Foundation.h>
#import "BookDelegate.h"
@interface Book : NSOperation <NSObject>
{
id <BookDelegate> delegate;
SEL didRecieveImageForBookSelector;
}
@property (strong, nonatomic) id delegate;
@property (assign) SEL didRecieveImageForBookSelector;
- (NSString*)getBookImageForBookId:(int)BookId externalRefference:(NSString*)url indexPath:(NSIndexPath*)indexPath;
- (id)delegate;
// Delegate methods
- (void)didRecieveImageForBook:(NSString*)imagePath indexPath:(NSIndexPath*)indexPath;
@end
Book.m
#import "Book.h"
#import <objc/runtime.h>
@implementation Book
static char kAssociationKey;
@synthesize didRecieveImageForBookSelector;
@synthesize delegate;
- (id)init
{
if (self = [super init])
{
[self setDidRecieveImageForBookSelector:@selector(didRecieveImageForBook:indexPath:)];
}
return self;
}
#pragma mark -
#pragma mark The default delegate functions
- (void)didRecieveImageForBook:(NSString*)imagePath indexPath:(NSIndexPath*)indexPath
{
NSLog(@"********************************************************");
NSLog(@"*** PLEASE IMPLEMENT THE FOLLOWING DELEGATE FUNCTION ***");
NSLog(@"*** didRecieveImageForBook:indexPath: ***");
NSLog(@"********************************************************");
}
#pragma mark -
#pragma mark Function for fechting images
// This method is not adapted to what YOU need, but left my code here in case it might help you out.
- (NSString*)getBookImageForBookId:(int)bookId externalRefference:(NSString*)url indexPath:(NSIndexPath*)indexPath
{
NSString *ext = [[url lastPathComponent] pathExtension];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%d.%@", APP_BookIMAGEPEFIX, BookId, ext]];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:imagePath];
if (fileExists)
{
return imagePath;
}
else {
NSURL *theUrl = [NSURL URLWithString:url];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:theUrl];
[request setDidFinishSelector:@selector(BookImageFetched:)];
[request setDidFailSelector:@selector(processFailed:)];
[request setTimeOutSeconds:60];
[request setDownloadDestinationPath:imagePath];
[request setDelegate:self];
[request startAsynchronous];
objc_setAssociatedObject(request, &kAssociationKey, indexPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
return @"";
}
}
- (void)BookImageFetched:(ASIHTTPRequest *)request
{
NSIndexPath *indexPath = objc_getAssociatedObject(request, &kAssociationKey);
NSString *imagePath = request.downloadDestinationPath;
[[self delegate] performSelector:self.didRecieveImageForBookSelector withObject:imagePath withObject:indexPath];
}
#pragma mark -
#pragma mark delegate functions
- (id)delegate
{
return delegate;
}
- (void)setDelegate:(id)newDelegate
{
delegate = newDelegate;
}
#pragma mark -
@end
あなたはGCDを使用することができます - 私はあなたが与えたリンクでGCDから欠落しているステップに気づきました。これは私が非同期的に画像を取得し、それが正常に動作したときにその準備をして通知するために使用するものです。
dispatch_queue_t concurrent = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(concurrent, ^{
__block UIImage *image = nil;
dispatch_sync(concurrent, ^{
//put code to grab image here
});
dispatch_sync(dispatch_get_main_queue(), ^{
//this gets called when the above is finshed
//you should also check if the image is nil or not
});
});
が、それはレコードの
に役立ちます願っています - 私はUIViewのスナップショットを取るためにこれを使用し、常に配置しようそれが一時的であっても私のターゲットは親ビューの中にあります - スピードアップしているようです。
UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, 0.0);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
あなたが同じアプローチを使用しているのかどうかはわかりません。私はあなたがすぐにこの問題を解決を願って:)
残念ながら、これは遅延を解決しない、それは白いページ(nilイメージ)を表示します! –
ああ、あなたのようにしたいです...インスタントインスタント画像撮影...どのデバイスを使用しているか、画像の複雑さによっては半分かかります。私が投稿したGCDのことは、あなたがイメージを即座に表示していなかったと仮定していたことです。 –
- 1. RxJava遅延オブザーバブルの遅延
- 2. スレッドの遅延 - 遅延
- 3. ルビー、遅延ジョブ、遅延:バックエンド:ActiveRecordの
- 4. Androidで巨大なUDP遅延/遅延
- 5. アニメーション遅延アニメーション遅延の増加
- 6. SQL ExpressとSQL CE、遅延/遅延
- 7. 遅延ロードによる遅延ポップアップタグ
- 8. 遅延評価とPythonの遅延バインド?
- 9. 遅延
- 10. 遅延
- 11. GAE:遅延の遅いリクエスト
- 12. アンドロイドスライドショーの遅延が遅い
- 13. Accessibility.dllの遅い遅延ロード?
- 14. ソケットプログラミング:遅延
- 15. Cssアニメーションランダム遅延
- 16. マウスホイールイベントの遅延
- 17. clojure.java.jdbc遅延クエリ
- 18. 遅延AWSコードパイプライン:
- 19. 遅延キューソリューション
- 20. SQLALchemy遅延コンパイルクラス
- 21. メソッドコールの遅延
- 22. ロケーションキャプチャエラー - 遅延
- 23. バグキープアライブ遅延
- 24. 遅延コレクション
- 25. Django:WSGI遅延
- 26. AngularJS遅延
- 27. nhibernate遅延ロード
- 28. Javaソケット遅延
- 29. MDBメッセージコンシューマ遅延
- 30. 遅延コンストラクタC++
ので、他の言葉であなたは、メモリ内の画像や店舗など、すべての本のページをキャプチャすることをお勧めしています?! –
これを行うには1つの方法があります。私のプロジェクトの1つでは、ローカルに保存したTVチャンネルのPNG画像をダウンロードしました。ローカルイメージがあるかどうかを確認して、それが返された場合はそれを直接返しました。それ以外の場合は空の文字列を返し、デリゲートメソッドがUITableViewに新しいイメージavailaleがあり、特定のrowAtIndexPathに属していることを伝えました。次に、そのセルを新しい画像で更新しました。 –
ok私は..私の場合はチャプター(HTMLファイル)を読み込んでjs関数を使ってページを設定しているので、すでにコンテンツを持っています。ユーザーがページをレンダリングする瞬間に次/前のページをキャプチャする必要があります。私の機能はうまくいきますが、その遅延が嫌い、ソリューションが遅延を完全に解決しません。 –