2016-08-24 31 views
0

我有一個非常基本的問題,因此沒有發佈任何代碼。什麼是在收集視圖中顯示圖像沒有失真的正確方法

概述

我有一個集合視圖,這使得使用我所編寫的自定義佈局。所有這些自定義佈局都會應用一些數學算法,並根據屏幕寬度找出放置在屏幕上的單元格的最佳數量,並嘗試使用填充四捨五入其他像素。因此,當收藏視圖改變其方向時,特別是在iPad Pro等設備上,我的大部分單元格大小都會有所不同。我的意思是,如果單元格的大小爲300 x 300縱向,則可能會變成320 x 300像橫向格式的東西。 (他們不是確切的價值只是想提供一個想法)

每個單元格都有imageView和圖像需要從服務器上下載。我正在使用SDWebImage。下載的圖片比我的單元格大,我不想將這些大圖片加載到內存中,因此我決定在將圖片下載到SDWebImageCache之前先調整圖片的大小。

問題

現在我的細胞大小是基於設備的方向發生變化,爲了使圖像看起來像素完美的我不得不調整每一次設備爲每個單元旋轉圖像。但那會導致糟糕的表現。

解決方案我已經想通了

  1. 我不得不緩存兩個圖像,每一個用於一個定向SDWeImageCache卻又多數民衆贊成將增加應用程序的內存佔用。

  2. 查找最大尺寸的單元格將在各種方向中獲得並將圖像調整爲該尺寸,然後使用相同的圖像對所有較小的單元格尺寸進行圖像查看,並將其模式設置爲AspectToFit。

請告訴我什麼是正確的方法。我不需要代碼,只需要想法。

+1

2.看起來最簡單。我會和2一起看看結果是否足夠好(我敢打賭它會)。如果沒有去1. – deadbeef

+0

@deadbeef:感謝您的建議:)解決方案2的唯一問題是,我不知道最大的單元格大小,直到用戶旋轉設備到所有的方向:(或我會有要預先計算所有方向的尺寸,因爲它涉及幾乎沒有幾個數學方程式,所以它應該是很好的尺寸,並且應該是重量輕於調整圖像本身的尺寸:D –

+0

它們在設備轉動時還是變形? – impression7vx

回答

1

讓我知道這是一個壞主意,但可能的選擇。

你可能

1)獲取原始圖像大小。 保存此信息。

FUNC resetImage(){

2)確定圖象寬度>高度

3)如果寬度>高度,則知道它是會是一個較長的圖像。確定你想要多久。假設您想要更寬的圖片大約1/10 *單元格的寬度

4)相應地確定圖像的高度。 ((1/10)/ widthOfCell)* imageHeight

5)如(寬度>高度)imageView.frame =的CGRect(0,0,1次/ 10 * widthCell,高度)

6)imageView.contentMode = .ScaleAspectFit,imageView。image = UIImage(命名爲「awesome」)

7)可能保存imageView.size以使用另一個旋轉。

這允許您只更改imageView,而不是保存圖像數據,希望刪除空白區域。評論並讓我們看看whatcha的想法。

+0

感謝哥們:)我感謝你的努力:)但是,不要以爲我可以使用自動佈局約束來更改imageView的大小,因爲許多其他UI組件都與它關聯。所以改變imageView框架會破壞他們幾個,並可能導致應變o/p。第二件事:是的你是對的,它刪除了白色空間,但爲了這個工作,我將不得不做這個計算和調整imageView爲每個方向不是好友:)無論如何,我會試一試: )因此,投票:) –

+0

哈哈沒問題!我希望你可以做到這一點,就像我自己做的那樣,只是不用周圍的按鈕或任何東西:PI不喜歡使用約束或故事板,只需做一個'imageView = UIImageView(frame:CGRect(.. 。))'然後當我需要改變它時,我可以簡單地說'imageView.frame',但是我是通過點擊按鈕來實現的,而不是在旋轉的時候!但是讓我知道它是否有效,我們將看到我們可以從那裏做些什麼! – impression7vx

+0

如果依賴於'imageView.frame',你可能需要重新調整邊上的按鈕! – impression7vx

相關問題