2013-01-01 49 views
3

我一直在閱讀我在這裏可以找到關於這個主題的一切,但我仍然不確定最佳的處理方式。我有一個沉重的UIImageView,它使用一組脂肪UIImages作爲動畫循環。這UIImageView作爲應用程序中每個屏幕的背景。 (客戶的請求,不是我的,所以不要討厭。)我們已經儘可能小的優化了png文件,但它仍然是一個相當沉重的負載。單個動畫UIImageView背景整個應用程序

我讀過幾篇關於UIImage如何在緩存中搜索該名稱的現有圖像(例如Shared UIImageView for background image throughout app - Singleton Property)的文章,但似乎沒有發生。我也一直在這裏讀關於singletons和在appdelegate中實例化的東西,但我不確定這些是否是正確的方法。

在應用程序的整個生命週期中加載UIImageView並在每個viewcontroller的後臺使用它的最佳方式是什麼?順便說一句,因爲它需要幾秒鐘才能加載,我將在應用程序啓動時添加一個「加載」頁面,該頁面使用單個靜態圖像和活動指示器。

另外,我不太熟悉測試和性能工具。我應該使用哪一個來測試性能,並確保這是導致整個應用程序猶豫的原因?

爲noob問題事先道歉 - 我通常會避免提問,但有時候,因爲在這種情況下,我甚至不知道從哪裏開始研究。

回答

2

我對自己很滿意。我使用了AppDelegate技術,它的工作非常漂亮。我宣佈在AppDelegate中一個UIImageView屬性,然後將圖像代碼添加到其吸氣劑:

- (UIImageView *)backgroundImageView { 
    if (!_backgroundImageView) { 
     NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:150]; 
     for (int imageNum = 0; imageNum < 150; imageNum++) { 
      [tempArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"image_00%03i.png",imageNum]]]; 
     } 
     _backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage animatedImageWithImages:tempArray duration:4.0]]; 
    } 
    return _backgroundImageView; 
} 

這也讓我殺死applicationDidReceiveMemoryWarning的對象。

然後我創建了一個輔助類,我可以跳進我的所有的UIViewController類:

+ (void)placeBackgroundImageUnderView:(UIView *)masterView { 
    myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    //Correct for shrinkage 
    appDelegate.backgroundImageView.frame = masterView.frame; 
    [masterView addSubview:appDelegate.backgroundImageView]; 
    [masterView sendSubviewToBack:appDelegate.backgroundImageView]; 
} 

這讓我補充一條線在每個viewDidLoad方法:

[HelperClass placeBackgroundImageUnderView:self.view]; 

事情是,只使用UIImage應該緩存整個事情,並加快加載時間。但似乎時不時的圖像將不得不重新加載 - 內存問題?因此,這允許我通過實例化對象一次並使用同一對象來控制它,同時也可以將該對象設置爲零,以便在需要時釋放內存。

由於添加它,整個應用程序加載速度更快。我添加了一個額外的負載屏幕,併爲該初始負載提供了一個活動指示器(也可以很好地工作),並且之後的所有內容都很快樂。