質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2967閲覧

UIImageViewで画像を領域いっぱいに表示したい

locking

総合スコア24

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/09/01 07:34

編集2020/09/01 07:36

現在Swiftでアプリ開発をしていますが、UIImageView内に画像を適切に表示することに失敗します。

実現したいこと

・横幅が画面幅、高さが横幅の5/9の枠(ImageView)内に、様々なサイズの画像を収めたい。
・画像の比率は保ちたい
・枠より小さい画像も、領域内いっぱいに拡大して隙間が出ないようにしたい
・kingfisherを使いたい

失敗したコード

swift

1@IBOutlet weak var markerImageView: UIImageView! 2 3override func viewDidLoad() { 4 super.viewDidLoad() 5 let imageWidth = self.view.frame.width 6 let imageHeight = imageWidth*5/9 7 let processor = ResizingImageProcessor(referenceSize: 8 CGSize(width:imageWidth,height:imageHeight),mode: .aspectFill) 9 markerImageView.kf.setImage(with: URL(string: imageUrl),options: [.processor(processor)]) 10}

実際の挙動

リサイズプロセッサーのmode.aspectFitにしてもaspectFillにしても、画像の全部を領域内に入れようとして、横や縦に隙間ができてしまう。.noneにすれば望み通り領域内いっぱいに画像が拡大されるが、比率が無茶苦茶になってしまう。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2020/09/01 08:11

imageWidth, imageHeightの値と、読み込み後(リサイズ後)の画像のサイズを教えて下さい。 (余談)今回の質問とは直接関係ありませんが、viewDidLoad()の時点では画面サイズは確定していないので、端末によっては画面幅と画像幅が一致しない場合があると思います。
locking

2020/09/01 09:33

imageWidthとimageHeightはそれぞれ414.0, 230.0となっていたのですが、末尾にprint(markerImageView.image?.size.width) print(markerImageView.image?.size.height) を追加したところ、どちらもnilになっていました。
fuzzball

2020/09/02 07:37 編集

>>どちらもnilになっていました。 それはまだ読み込みが終わってないからmarkerImageView.imageがnilなのでは?
guest

回答1

0

KingfisherのResizingImageProcessorを使用せず、UIImageViewのcontentModeで設定してあげればどうでしょうか?

swift

1markerImageView.kf.setImage(with: URL(string: imageUrl)) 2imageView.contentMode = .scaleAspectFill 3imageView.clipsToBounds = true

KingfisherのResizingImageProcessorを使用したい特別な理由がある場合はすみません。

投稿2020/09/01 14:11

yuutetu

総合スコア88

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

locking

2020/09/02 06:49

望み通りの挙動を確認することができました、ありがとうございます。 ただ、Kingfisherの機能だけで完結できればコードの統一性がいいので、引き続きKingfisherを使った方法がないか募集させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問