2012-08-26 2 views
1

Apple의 PhotoScroller 샘플 코드에서 코드를 추출하여 CATiledLayer을 사용했습니다. 타일에서 인터넷에서로드 된 8000x7000px의 이미지가 있습니다.슈퍼 뷰에서 이미지를 제거한 후에도 이미지를 보임

이것은 내 앱의 일종의지도 기능입니다. 나는 또한 서로 다른 오버레이를 가진 두 개의 거의 동일한 이미지를 가지고 있습니다 (운없이 오버레이 만 추가하려고했습니다).

나는 세 가지 선택 사항 사이를 토글하기 위해 UISegmentedControl을 가지고 있으며, imageView가 선택한 이미지에서 이미지를로드하기를 원합니다. 따라서 사용자가 이미지 중 하나를 확대하고 다른 옵션을 선택하면 배율과 좌표는 동일하게 유지되며 imageView는 선택한 이미지를 필요한 타일 영역에로드합니다.

나는 이것을 부분적으로 관리했다. 또는 실제로 이것을 관리했지만 다른 옵션을 선택하면 [imageView removeFromSuperview]; 함수가 호출 될 때 전체 화면이 검게 변합니다. 인터넷 속도에 따라 2 초 내에 검은 색으로 표시되면 올바른 타일이 표시됩니다.

가능한 경우 레이어를 다음 레이어로 "페이드"시키길 원합니다. 여러분이 아시다시피, CATiledLayer을 사용할 때 첫 번째 레이어는 저해상도의 전체 이미지이지만 확대 할 때 필요한 타일은 작은 타일로 다음 레이어로 "사라집니다".

기본적으로 (TilingView*)imageView에 "다시로드"명령을주고 마지막 이미지 위에 "페이드"시키길 원합니다.

나는 [imageView removeFromSuperview];을 주석 처리하려고했는데, 실제로는 내가 원하는 것에 가깝게 잡혔다. 확대하고 다른 옵션을 선택하면 새 이미지가 이전 이미지보다 실제로 사라져 버렸지 만 다시 축소했을 때 이전 이미지가 배경에 새 이미지 뒤에 분명히 붙어있어 아무 것도 응답하지 않았습니다. 나중에 superView에서 제거해야하지만 새 이미지가 imageView로 자리 잡으면 서 더 이상 액세스 할 수 없습니다. 사람들이 여기 코드를보고 싶어 할지도 모르겠지만 어떤 코드를 보여줄지 전혀 알지 못합니다. 그리고 CATiledLayer은 너무 가깝게 문서화되어 있습니다. 실제로 무슨 일이 일어나는지 이해하는 데 어려움을 겪고 있습니다.

+0

Inet에서 jpeg 대신 전체 타일을로드하는 경우 시간이 오래 걸리는 것처럼 보입니다.PhotoScrollerNetwork (github에 있음)를 확인해보십시오.이 도구를 사용하면 jpeg를 다운로드하고 타일을 바꿔서 동시에 다운로드 할 수 있습니다. Quartz 또는 libjpegturbo와 함께 사용할 수도 있습니다. –

+0

@DavidH 그래, 그걸 확인해 봤지만 시간이 좀 더 걸리지 않을까? 나는 이미지를보기 위해 전체 이미지를 다운로드해야한다고 생각하니? 필요한 타일 대신에? 지도 기능이므로 사용자는 모든 이미지의 심층 레이어를 전혀 볼 수 없으므로 전체 이미지를 다운로드 할 필요가 없습니다. – Sti

+0

첫 번째 작은보기의 타일을 다운로드 할 수 있다면 정확합니다. 시간면에서 엄청난 승리. –

답변

1

일부 스케치 코드를 통해 작동하게했습니다. 다른 더 나은 해결책이 있을지도 모르지만, 이것은 내가 아는 유일한 순간입니다.

문제는 내가 [imageView removeFromSuperview];을 제거했을 때 마지막 이미지를 언로드하지 않아서 메모리에 영원히 남을 수 있다는 것이 었습니다. 확대/축소 및 스크롤링의 영향을받지 않았으므로 축소했을 때 항상 배경에있었습니다. 옵션간에 여러 번 전환하려면 여러 이미지가 배경에 추가됩니다.

간단히 "helper"이라고 부릅니다. 새 이미지가 아직로드되지 않았을 때 조만간 제거하면 조만간 수퍼 뷰에서 제거하지 않고 옵션을 전환 할 때 이전 imageView의 내용을 가져 오는 새 imageView이 표시됩니다.

이제 대리자 메서드 scrollViewWillBeginZoomingscrollViewWillBeginDragging에서 [helper removeFromSuperview];을 호출합니다. 이로 인해 다른 옵션을 클릭하고 사용자 스크롤 또는 확대/축소 사이의 시간에 최대 두 개의 이미지가 포함 된 메모리가됩니다.

참고 : 사용자가 UISegmentedControl의 전환 옵션 후 즉시 스크롤하거나 확대/축소하면 새 이미지가 아직로드되지 않아 검정으로 변합니다.

관련 문제