簡體   English   中英

通過緩存異步加載本地UIImage

[英]Load local UIImage asynchronously with caching

UIScrollViewController

| ----- UIImageView1、2、3、4、5 ...

我有一個UIScrollViewController ,其中包含幾個子視圖。 每個子視圖都包含一個UIImageview ,滾動UIImageView ,將使用以下方式加載當前頁面兩側的頁面:

imageView = [[UIImageView alloc] initWithContentsOfFile:fileName];

但是,當本地圖像文件變得很大(> 2MB)時,滾動變得非常有影響,並且卡住了。

有辦法避免這種情況嗎? 例如使用緩存還是異步進行?

您可以在另一個線程中異步加載圖像,或者如果您僅支持高於4的iOS,則很容易使用塊來執行它。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
    UIImageView* imageView = [[[UIImageView alloc] initWithContentsOfFile:fileName]autorelease];       
    dispatch_async(dispatch_get_main_queue(), ^{
        //Maybe correct the frame too
        [self.view addSubview:imageView];
    });
});

如果您不能使用塊,則可以在不同的線程中執行,但是涉及的更多。

無論如何,我建議:

  • 最好創建帶有“虛擬”或“旋轉器”的UIImageViews添加到滾動視圖,然后在用戶交互停止(通過委托方法檢測到)時,可以重新加載可見的imageviews。

  • 當用戶滾動時,最好為所需的圖像加載和緩存UIImage對象(例如,將它們存儲在數組或字典中)。

  • 縮放UIImage內容以適合ScrollView中的UIImageView框架。 這樣,在渲染期間,UIImage不會“自動縮放”所提供的圖像,因此會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM