1

次の命名規則の画像があります。Retina デバイスでは常に非 2x バージョンが表示されます。派生データからキャッシュ イメージを削除しましたが、まだ表示されません。imageNamed を明示的に「Back」に設定すると機能します。これらは画像です。Back@2x.png Back.png

UIImage *backImage = [UIImage imageNamed:@"Back"];
NSLog(@"back image height %f",backImage.size.height);
NSLog(@"back image width %f",backImage.size.width);

UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom];
[btnBack setImage:backImage forState:UIControlStateNormal];
btnBack.frame = CGRectMake(0, 0, backImage.size.width, backImage.size.height);
[btnBack addTarget:self action:@selector(Click_On_Btn_Back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:btnBack];
self.navigationItem.leftBarButtonItem = backBarButton;
4

4 に答える 4

1

試す

[UIImage imageNamed:@"Back.png"];

また、イメージの両方のバージョンが [ターゲット] -> [ビルド フェーズ] -> [バンドル リソースのコピー] の下にリストされていることを確認してください。@2x バージョンがそうでない場合は、インポートするときに [宛先グループのフォルダーにコピーする (必要な場合)] チェックボックスをオンにしてください。

于 2012-12-10T19:51:32.620 に答える
0

.pngimageNamed: パラメータには指定しないでください。

例: ファイルは名前Back.pngBack@2x.png;である必要があります。あなたのコードは

UIImage *backImage = [UIImage imageNamed:@"Back"];
于 2012-12-10T21:10:40.523 に答える
0

@Kellerの答えはうまくいくはずです。本当にpng画像を使用していますか?

于 2012-12-20T14:28:36.140 に答える
0

これは 1 つの方法にすぎませんが、バンドルからパスを取得できます。

// in this example, we load test.png from the bundle
NSString *pathToResource = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];

これが非常に便利なのは、イメージの @2x バージョンを使用するかどうかを自動的に決定するだけでなく、ローカライズされたファイルがある場合にも、現在のユーザー ロケールのファイルへのパスを提供することです。ローカライズされたファイルはメイン ディレクトリではなく、独自のサブフォルダーにあるため (たとえば、英語のローカライズされたファイルは @"en.lproj" サブフォルダーにあります)、名前で呼び出すのは面倒なので、これは便利です。フルパス。このメソッドはパスを取得します。

于 2012-12-10T22:52:08.527 に答える