1
私はUIPageViewController
クラスを持っています。そこで、すべての画像URL(nTempElements
)を収集し、画像のロードが発生するContentViewController
に渡します。ユーザーが前後にスクロールすると、スクロールされたページイメージがロードされるまで、常に最初のビューコントローラーイメージがプレースホルダーとして表示されます。UIPageViewControllerトランジション中に画像を読み込む
ContentViewController
でdispatch_async
を削除した場合、この問題は有効ではなくなりますが、画像の読み込みがメインスレッドで行われるため、タッチイベントに少し反応しにくくなります。
この問題のための任意の勧告やソリューション?
PageContentViewController.m
- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (([self.nTempElements count] == 0) || (index >= [self.nTempElements count])) {
return nil;
}
// Create a new view controller and pass suitable data.
PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentViewController"];
pageContentViewController.imageURL = self.nTempElements[index];
return pageContentViewController;
}
ContentViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *url = [NSURL URLWithString:self.imageURL];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage* image = [[UIImage alloc]initWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
[self.newsImageView setImage:image];
});
});
}
'pageContentViewController'を初期化した後、イメージがロードされた後を除いて、' setImage'をどこでも呼び出すことはありません。 'pageContentViewController'はどのようにして最初のviewcontrollerイメージを表示できますか?他の場所で 'newsImageView'の画像を設定しましたか? – trungduc
まだダウンロードされていれば、イメージをキャッシュしないでください。 AlamofireImageやSDWebImageのようなサードパーティのライブラリを探してみてください –