2016-08-24 2 views
0

私は非常に基本的な質問があり、コードを投稿していません。コレクションビューで歪みのない画像を表示する正しい方法は何ですか

概要私が書いたカスタムレイアウトを使用するコレクションビューを持っています。このカスタムレイアウトは、いくつかの数式を適用し、画面幅に基づいて画面に配置する最適なセル数を見つけ出し、パディングを使用して追加のピクセルを四捨五入しようとします。その結果、私のセルのサイズの大部分は、コレクションビューが特にiPad Proのようなデバイスでその向きを変えるときに変化します。私が意味することは、セルのサイズが縦300×横300の場合、横320×300のようになります。 (それらはちょうどアイデアを出そうとする正確な値ではありません)

すべての単一セルにはimageViewがあり、サーバーからイメージをダウンロードする必要があります。私はSDWebImageを利用しています。ダウンロードしたイメージは自分のセルよりも大きく、大きなイメージをメモリにロードしたくないので、SDWebImageCacheに保存する前にダウンロードしたイメージのサイズを変更することに決めました。

問題

今私の細胞の大きさは、デバイスの向きに基づいて変更、画像の外観画素が完璧にするために、私は毎回デバイスは、各セルのために回転させた画像のサイズを変更する必要がありますされているよう。しかしそれは悪い業績につながります。

ソリューション私は二つの画像SDWeImageCache内の1つの方向についてそれぞれ1をキャッシュする必要がありますが、再びアプリのメモリフットプリントが増加しますthatsの

  1. を考え出しました。

  2. セルがさまざまな方向に移動し、そのサイズに画像のサイズを変更し、その画像サイズがAspectToFitに設定されている画像ビューのすべての小さいセルサイズで同じ画像を使用します。

正しいアプローチが何であるか教えてください。私はコードを必要としない、ちょうどアイデアが必要です。

+1

2.最も簡単なようです。私は2と一緒に行き、結果が十分に見えるかどうかを見る(私はそれが賭ける)。 012と答えてください。 – deadbeef

+0

@deadbeef:提案をいただきありがとうございます:)解決策2の唯一の問題は、ユーザーがデバイスをすべての方向に回転させるまでセルの最大サイズがわからないことです。 D –

+0

デバイスの向きが変わっても歪んでいるのですか? – impression7vx

答えて

1

これは悪い考えではあるが、潜在的なオプションであるかどうかを教えてください。

可能性があります。

1)元の画像サイズを取得します。 これを保存します。

FUNCのresetImage(){

2)画像の幅>高さ

3かどうかを確認する)幅>高さならば、あなたはそれがつもりが長くピクチャである知っています。あなたがどれくらいの期間それを望むかを決定してください。 1/10 *の幅の広い写真がほしいとします。

4)画像の高さをそれに応じて決めます。 ((1/10)/ widthOfCell)* imageHeight

5)IF(幅>高さ)imageView.frame = CGRect(0,0,1/10×widthCell、高さ)

6)imageView.contentMode = .ScaleAspectFit、imageView。image = UIImage(名前: "awesome")

7)別の回転を使用する場合は、imageView.sizeを保存する可能性があります。

これにより、イメージデータを保存する代わりに、imageViewだけを変更し、うまくいけば空白を削除することができます。コメントやほのぼのと思うのを見てください。

+0

ありがとうございました:)あなたの努力に感謝します:)しかし、イメージレイアウトのサイズが変更されると、他の多くのUIコンポーネントが自動レイアウト制約を使用して関連付けられているようにレンダリングされると思います。したがって、imageViewフレームを変更すると、それらのうちのいくつかが破損し、o/pの歪みにつながる可能性があります。二番目のこと:はい、あなたはそれが空白を取り除くことは間違いありませんが、これを動作させるためには、この計算を行い、それぞれの方向についてimageViewのサイズを変更しなければなりません:)とにかく私は試してみましょう: )それゆえに上の投票:) –

+0

母は問題ない!私はあなたがこれを行うことができますように、私はそれを周りのボタンではなく、自分自身でやったことを望みます:PIは制約やストーリーボードを使うのが好きではありません。単に 'imageView = UIImageView(frame:CGRect(.. 。)) '私はそれを変更する必要があるとき、単に' imageView.frame'と言うことができますが、私はボタンのクリックで、回転ではありませんでした!しかし、それがうまくいっていないのかどうか私に教えてください。そして、私たちがそこからできることを見るでしょう! – impression7vx

+0

'imageView.frame'に依存している場合、側面のボタンを再調整する必要があるかもしれません! – impression7vx

関連する問題