20

IBを使用してビューにUIImageViewコントロールを配置しました。コントロールのサイズは私が決めたもので、かなりランダムなサイズです。私がやりたいのは、imageプロパティを新しい画像に設定するたびに自動的にサイズを変更するコントロールです。実際に画像のサイズにサイズ変更してほしい。自動的に行うことはできますか?コードの介入なし?そうでない場合-この場合の最善のアプローチは何でしょうか?

今日何が起こるかは奇妙です。ImageViewに画像をロードすると、ImageViewのサイズを変更しなくても、画像が正しく表示されるのがわかります。これは、ImageView上でユーザーのタッチをつかむという私の意図を妨げます。ユーザーは実際の画像に触れますが、画像の一部がImageViewの外側にあるため(これは奇妙な部分です)、ポイントマッピングがおかしくなります。誰かがこれについて何か説明を思いつくことができますか?

ありがとう

4

3 に答える 3

27

画像のサイズは、UIImageView の実際の大きさには関係がなく、UIImageView のサイズは、Interface Builder で指定された (または割り当てられた) サイズのみに依存します。そうしないと、たとえば Retina ディスプレイに @2x 画像を使用すると、画像がすべて奇抜になります。

これを修正したい場合は、画像を設定するときにフレームも変更する必要があります。今これを行っている場合:

[imageView setImage:[UIImage imageNamed:@"myImage.jpg"]];

次のように変更します。

UIImage img = [UIImage imageNamed:@"myImage.jpg"];
[imageView setImage:img];
imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
                             img.size.width, img.size.height);

ただし、これは含まれているビューのレイアウトを変更しません。レイアウトの制約を使用して、iOS 6 で他のビューのサイズを自動的に変更することができます。あなたが Apple 開発者であれば、WWDC の説明ビデオを見ることができます。このビデオでは、そのシステムがどのようにうまく機能するかを説明しています。

ビューが大きくならないことに問題がなく、含まれているビューの寸法と一致しないものに変更したときに画像が境界をオーバーフローする方法が問題である場合は、インターフェイスで「サブビューをクリップ」チェックボックスを設定できます。画像ビューのビルダー。これにより、ビューが独自のバウンディング ボックスの外側には何も描画されなくなります。また、スケーリング モードを「Aspect Fill」または「Scale To Fill」に設定すると、画像は常にビューを含むビューの境界全体を埋めます。 .

于 2012-09-29T07:13:47.980 に答える