imageWithContentsOfFileで遭遇したピット

1560 ワード

工事に引きずり込むlogin@2x login@3x2枚の画像を使用して、次のコードを使用します.
    BGimageView.image = [UIImage imageWithContentsOfFile:path];```
              。
   *Apple*         `imageWithContentsOfFile:`       *@2x* *@3x*     ,       。
```NSString *path = [[NSBundle mainBundle]pathForResource:@"login" ofType:@"png"];
  BGimageView.image = [UIImage imageWithContentsOfFile:path];

奇妙なことに、このように書くと画像が得られず、戻ってきたpath印刷の結果が空になります.そこで私はimageWithContentsOfFileが@2 x@3 xが本当かどうかを区別できるのではないかと疑った.もう一度文書をよく見ると、私はまたこのような言葉を見た.
The full or partial path to the file. `リンクの完全または一部'
私が取得したpathに問題があるのではないでしょうか.そして私はNSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"login.png"]; BGimageView.image = [UIImage imageWithContentsOfFile:path];で試してみたが、やはり写真を手に入れた.本当に皇天は心を痛めていない.NSString *path = [[NSBundle mainBundle]pathForResource:@"login" ofType:@"png"];は、特定のファイル@2 xが@2 x、@3 xが@3 x、Loginがloginであることを理解すると、loginで画像を取得するアドレスは、loginという画像が存在しないため、NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"login.png"];で取得されるのは、類似のファイルの相対経路(これは理解されている)であり、具体的には、この中の@2 x、@3 xがimageWithContentsOfFile:で自動的にマッチングされる.
2017.11.03号更新
Xcode 9が出てくると同時に大きな穴があり、私が前に言った方法では写真が手に入らないようになりました.次のように(Xcode 9のみ)プロジェクトファイル-"Build Phase-"Copy Bundle Resourcesを選択してもう一度画像を追加すれば、Xcode 9は画像をドラッグしてプロジェクトに入るときにデフォルトでbundleに追加されていないため、画像を取得できません.しかし、9以前の仲間たちは安心して使用することができます(Xcode 9は独占!!).