2016-08-24 7 views
0

나는 매우 기본적인 질문을 가지고 있으므로 코드를 게시하지 않습니다.컬렉션보기에서 왜곡없이 이미지를 표시하는 올바른 방법은 무엇입니까

개요는 내가 작성한 사용자 지정 레이아웃을 사용합니다 콜렉션 볼 수 있습니다. 이 모든 맞춤 레이아웃은 일부 수학을 적용하고 화면 너비에 따라 화면에 배치 할 최적 셀 수를 찾고 패딩을 사용하여 추가 픽셀을 반올림합니다. 결과적으로 대부분의 셀 크기는 컬렉션보기가 iPad Pro와 같은 장치에서 방향이 바뀔 때 달라집니다. 내 말은 셀 크기가 300 x 300 인 경우 가로로 320 x 300이 될 수 있습니다. (그들은 단지 아이디어를 내고자하는 정확한 값이 아닙니다.)

모든 단일 셀에는 imageView가 있으며 서버에서 이미지를 다운로드해야합니다. SDWebImage를 사용하고 있습니다. 다운로드 한 이미지는 내 셀보다 훨씬 크기 때문에 큰 이미지를 메모리에로드하고 싶지 않으므로 다운로드 한 이미지의 크기를 SDWebImageCache에 올려 놓기로 결정했습니다.

문제

이제 내 세포의 크기는 장치 방향에 따라 변경, 이미지보기 픽셀 완벽하게하기 위해 내가 할 때마다 장치는 각 셀에 대해 회전 이미지 크기를 조정해야 할 것이다대로. 그러나 그것은 나쁜 성과로 이어질 것입니다.

솔루션 나는 두 이미지 SDWeImageCache 한 방향에 대한 각각의 캐시해야하지만, 다시 응용 프로그램의 메모리 풋 프린트를 증가 이잖아

  1. 을 낸 것.

  2. 가장 큰 크기의 셀을 찾아서 다양한 방향으로 가져 와서 그 크기로 이미지의 크기를 조정 한 다음 이미지 크기가 AspectToFit으로 설정된 이미지보기로 모든 작은 셀 크기에 동일한 이미지를 사용합니다.

정확한 방법은 무엇입니까? 코드가 필요 없으며 단지 아이디어가 필요합니다.

+1

2. 가장 쉬운 것 같습니다. 2로 가면 결과가 충분히 좋아 보이는 지 알 수 있습니다 (나는 그렇게 할 것입니다). 만약에 1로 가지 않으면. – deadbeef

+0

@deadbeef : 제안 해 주셔서 감사합니다. 해결책 2의 유일한 문제점은 사용자가 모든 방향으로 장치를 회전시킬 때까지 셀의 최대 크기를 알 수 없다는 것입니다. (또는 모든 방향에 대한 크기를 미리 계산할 수 있습니다. 다시 계산할 수있는 수학 공식은 거의 없으며 이미지 자체의 크기를 조정할 때보 다 가벼워 야합니다. D –

+0

장치가 돌아 가거나 왜곡되어 있습니까? – impression7vx

답변

1

이것이 나쁜 생각이지만 잠재적 인 옵션이 있다면 알려주십시오.

당신은

1) 원본 이미지의 크기를 얻을 수 있습니다. 저장하십시오. 사진 폭> 높이

3) 폭> 높이의 경우는, 당신이 그것을거야 더 이상 사진이 될 알고있는 경우

FUNC의 resetImage() {

2)를 결정합니다. 얼마나 오래 원하는지 결정하십시오. 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 만 변경하고 공백을 제거하면됩니다. 코멘트 및 lemme 생각을 참조하십시오.

+0

Thanks buddy :) 당신의 노력에 감사드립니다 :) 그러나 나는 ' 한 번만 렌더링하면 imageView 크기를 변경할 수 있다고 생각합니다. 다른 UI 구성 요소는 자동 레이아웃 제약 조건을 사용하여 렌더링됩니다. 그래서 imageView 프레임을 변경하면 그 중 몇 개가 깨져서 o/p가 변형 될 수 있습니다. 두 번째 일은 : 네가 맞다면 공백을 없애기 위해서입니다. 그러나이 작업을하기 위해서는 계산을하고 크기를 조정해야합니다. 각 방향에 대해 그것은 친구가 아닙니다 :) 어쨌든 저는 시도 할 것입니다 :) 그러므로 위 표 : –

+0

하하 문제 없어! PI를 사용하여 제한이나 스토리 보드를 사용하는 것을 선호하지 않습니다. 단지'imageView = UIImageView (frame : CGRect (..)를 사용하십시오. .))'그것을 변경해야 할 때 간단히'imageView.frame'을 말할 수는 있지만 회전이 아니라 버튼 클릭만으로 할 수 있습니다! 그러나 그것이 작동했는지 또는 작동하지 않는지를 알려주십시오. 그러면 우리가 할 수있는 것을 볼 것입니다! – impression7vx

+0

'imageView.frame'에 의존하는 경우 측면의 버튼을 다시 조정해야 할 수도 있습니다! – impression7vx

관련 문제