3

-[UIImage imageWithContentsOfFile:]を使用する一連のコードと完全なパスを含む継承されたプロジェクトがあります。私はそれを使用するように変換していて、ファイル名 (拡張子なし) のみを使用しているので、必要に応じてまたはまたはの-[UIImage imageNamed:]ようなものを渡して@"icon"取得できます。icon.pngicon@2x.pngicon~ipad.png

問題は、プログラムに画像のサイズを確認したい部分があり、大きすぎる場合は代わりにTooBigImage.png.

したがって、 を呼び出す場合[UIImage imageNamed: someName]、どの拡張/変更名を使用するかを知る必要があります。基本的に、そのファイルへのパスが必要なので、画像をロードする前にサイズを確認できます。

代わりに、確認する方法などがある場合はimageSizeForImageNamed:、それを使用しても問題ありませんが、何も知りません。

「if retina、append @2xなど...」全体を再実装したくはありません。それは(a)面倒で(b)壊れやすいからです(Appleが動作を変更/強化した場合はどうなりますか?)

ヒント?

ありがとう!

4

3 に答える 3

0

ピクセルの使用sizescaleプロパティ:

UIImage *getMySize = [UIImage imageNamed:@"blah"];

float width = getMySize.scale * getMySize.size.width;

float height = getMySize.scale * getMySize.size.height;

これがUIImage ドキュメントです。

于 2012-07-11T22:02:14.250 に答える
-1

[UIImage imageNamed: @"icon"]常にアプリケーションのメイン バンドルを検索します。そのicon.pngため、見つけるにはバンドル内に配置する必要があります。そこではサブパスは許可されません。

ただし、[NSBundle bundleWithPath: @"subfolder"]ここでの利点は、バンドル メソッドを使用して最適化されたアセットを取得できることです。

NSBundle *bundle = [[NSBundle bundleWithPath: @"folder"] autorelease];

次に、[bundle pathForResource:ofType:]フォルダから正しい画像リソース パス (つまり、icon~ipad) を返し、[UIImage imageWithContentsOfFile:]サイズ修飾子を処理します。

この質問には答えがありませんが、これに関する私の経験をうまくまとめています。 NSBundle pathForResource:ofType: と UIImage imageWithContentsOfFile: スケールとデバイス修飾子をどのように処理しますか?

于 2012-07-11T22:32:22.267 に答える
-1

私の知る限り、ファイルのサイズを手動でチェックするには、独自の関数を実装する必要があります。

次のように、自分で名前を生成できます。

-(bool)fileOk:(NSString*)filename
{
    bool retina = [UIScreen mainScreen].scale == 2.0;
    static bool iPad = UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad;

    //Generate the filename
    NSString *fullFilename = [NSString stringWithFormat:@"%@%@%@",filename,(retina)?@"@2x":@"",(iPad)?@"~ipad":@"~iphone"]; 

    //Get the size:

    NSError *error;
    NSString *fullPath=[[NSBundle mainBundle] pathForResource:fullFilename ofType:@"png"];
    NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath: fullPath error:&error];

    return (fileDictionary && [fileDictionary fileSize]<SOME_TO_BIG_SIZE_CONSTANT);
}

次に、画像を表示するかどうかを選択できます。私はコードを試していないので、タイプミスがあるかもしれません...これがあなたが探しているものであることを願っています...

于 2012-07-11T22:06:16.920 に答える