簡體   English   中英

iOS:管理通用應用

[英]iOS: manage an universal app

我為iPad創建了一個應用程序,因此有兩個不同版本的圖像,例如:

image.png (for iPad 2 or iPad Mini-not retina)
image@2x.png (for iPad >= 3 and iPad mini-retina)

很簡單

現在,我應該創建一個通用版本的應用程序,因此我創建了新的啟動圖像,圖標和一些不帶@ 2x的iphone尺寸的背景,因為我不想考慮iphone 3gs,所以我不設置帶有iphone的圖像。 @ 2x。 沒關系。

但是我的應用程序是游戲,因此我有很多圖像也適合我的iPhone版本。 問題是iphone 4、4s,5和5s用@ 2x拍攝圖像,但是對於這些設備,尤其是對於iPhone 4,這些圖像非常大,並且由於崩潰而導致內存泄漏。 現在,我的問題是:如果設備是視網膜,有沒有辦法獲取沒有“ @ 2x”的圖像?

當然,您只需要自己打開圖像即可。

例如,我想擁有一個類似“ imageNamed”的方法,但又不想像imageNamed那樣進行緩存,因此我編寫了自己的緩存。 這不是您想要的功能,但是它說明了概念,您可以制定自己的規則。 自己執行實現不是很多工作。 如果緩存imageNamed,只需使用imageNamed打開最終決定使用的圖像。

// An "uncached" version of -imageNamed.
// It looks for the scale-and-idiom suffixes @2x, ~ipad, and @2x~ipad
// and preferentially loads the specific version if it is available.
+ (UIImage *)imageNamedUncached:(NSString *)name {
    NSString *tryName;
    NSString *nonRetinaiPadTryName = @"";
    NSArray *parts = [name componentsSeparatedByString:@"."];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        if ([[UIScreen mainScreen] scale] == 1.0) {
            // non-retina
            tryName = [parts[0] stringByAppendingString:@"~ipad"];
            tryName = [tryName stringByAppendingString:@"."];
            tryName = [tryName stringByAppendingString:parts[1]];
        } else {
            // retina
            tryName = [parts[0] stringByAppendingString:@"@2x~ipad"];
            tryName = [tryName stringByAppendingString:@"."];
            tryName = [tryName stringByAppendingString:parts[1]];
            nonRetinaiPadTryName = [parts[0] stringByAppendingString:@"~ipad"];
            nonRetinaiPadTryName = [nonRetinaiPadTryName stringByAppendingString:@"."];
            nonRetinaiPadTryName = [nonRetinaiPadTryName stringByAppendingString:parts[1]];
        }
    } else {
        // iPhone
        if ([[UIScreen mainScreen] scale] == 1.0) {
            // non-retina
            tryName = name;
        } else {
            // retina
            tryName = [parts[0] stringByAppendingString:@"@2x"];
            tryName = [tryName stringByAppendingString:@"."];
            tryName = [tryName stringByAppendingString:parts[1]];        }
    }
    NSString *path = [[NSBundle mainBundle] pathForResource:tryName ofType:nil];
    //NSLog(@"For tryName %@ I get path %@",tryName, path);
    if ( ! path) {
        // If this is a retina iPad we made a non-retina try name -- so check that
        if ( ! [nonRetinaiPadTryName isEqualToString: @""]) {
            path = [[NSBundle mainBundle] pathForResource:nonRetinaiPadTryName ofType:nil];
            //NSLog(@"For non-retina ipad try name %@ I get path %@",nonRetinaiPadTryName, path);
        }
        if ( ! path) {
        // Try the unmodified name
        path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
            //NSLog(@"For base name %@ I get path %@",name, path);
        }
    }
    UIImage *pathImage = [UIImage imageWithContentsOfFile:path];
    return pathImage;
}

暫無
暫無

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

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