2017-11-21 1 views
1

私はUIPageViewControllerクラスを持っています。そこで、すべての画像URL(nTempElements)を収集し、画像のロードが発生するContentViewControllerに渡します。ユーザーが前後にスクロールすると、スクロールされたページイメージがロードされるまで、常に最初のビューコントローラーイメージがプレースホルダーとして表示されます。UIPageViewControllerトランジション中に画像を読み込む

ContentViewControllerdispatch_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]; 
     }); 
    }); 
} 
+0

'pageContentViewController'を初期化した後、イメージがロードされた後を除いて、' setImage'をどこでも呼び出すことはありません。 'pageContentViewController'はどのようにして最初のviewcontrollerイメージを表示できますか?他の場所で 'newsImageView'の画像を設定しましたか? – trungduc

+0

まだダウンロードされていれば、イメージをキャッシュしないでください。 AlamofireImageやSDWebImageのようなサードパーティのライブラリを探してみてください –

答えて

0

このコードをたどる役立つ場合がございます!!

関連する問題