2011-01-13 4 views
2

UIScrollView를 루프하고 싶지만보기 목록을 통해 대부분의 루프를 돌리는 것이 아니라 하나의 하위보기를 스크롤하지만 원활하게 순환합니다.Looping UIScrollView Horizontally

본질적으로지도보기를 만들려고하고 있는데, 확대하고 축소 할 수 있고 주변을 스크롤 할 수 있습니다.

누구에게 조언이 있습니까?

+0

[근무 샘플 프로젝트] (https://docs.google.com/leaf?id=0B7--XCpu3Or_MDAyNzU0MjktMjAxZS00NjQ1LTk3YzAtNGYzOGQwNTc4NjAy&hl=en) – Khrob

+0

적 이미지에 대한 방법을 알아낼 수 없습니다 스크롤의 끝에서 '스틱'으로 지역? –

답변

4

나는 이전에 같은 종류의 문제로 놀고 있었고 하나의 솔루션에 대한 간단한 데모를 함께 해킹했습니다. 벗어난 타일 많은지도로 구성된지도보기가 관리하기가 쉽지 않거나 어렵게 될지 확실하지 않습니다.

https://github.com/jonah-carbonfive/WrappingScrollView

는 여기 코드에서 명확하지 않다 내가이 경우에하고 있어요입니다.

  1. 표시 할 내용이 모두 포함 된 단일보기를 만듭니다. 이것을 "타일 뷰"라고 부를 것입니다.
  2. UIScrollView의 콘텐츠보기에 가운데에 타일보기를 표시합니다. 콘텐츠 뷰를 타일 뷰보다 훨씬 크게 만듭니다 (아래에서 얼마나 큰지 확인하십시오).
  3. 타일보기의 내용 이미지를 만듭니다.
  4. 이 이미지가 포함 된 UIImageView "타일"을 만들고 스크롤 뷰의 내용보기를 채우기 위해 타일 뷰 주위에 배치합니다. 그것은 많은 UIImageViews 일지 모르지만 메모리 풋 프린트가 그렇게 나쁘지 않도록 단일 이미지를 공유합니다.
  5. 이제 내용을 적어도 한 번 감싸는 것처럼 보이는 큰 스크롤보기가 있습니다. 그러나 충분히 멀리 스크롤하면 여전히 가장자리를 칠 것입니다.
  6. 스크롤 뷰의 -scrollViewDidScroll: 대리자 메소드에서 타일 뷰가 완전히 보이지 않는지 확인합니다. 그렇다면 스크롤 뷰의 내용 오프셋 위치를 변경하여 내용 뷰의 위치를 ​​변경하여 타일 뷰가 표시된 영역의 중간에 다시 오도록합니다. 사용자가 타일 뷰의 이미지를보고 다시 타일 뷰 자체로 돌아 갔음을 사용자가 결코 알지 못하게합니다.
  7. 하지만 잠깐! 중앙 타일 뷰만 실제로 터치에 응답합니다. 모든 다른 사본은 결국 이미지 일뿐입니다. -hitTest:withEvent:을 무시하여 타일보기의 위치를 ​​바꾸어 사용자가 어떤 이미지보기를 터치하든간에 위치를 변경하여 super을 호출하기 전에이 문제를 해결할 수 있습니다. 이제 모든 터치가 타일보기에 도달합니다.
  8. 타일 뷰를 다시 그릴 때마다 타일 뷰의 이미지를 업데이트해야합니다.

그건 미친 짓이지 만 임의의 대화 형 UIViews와 UIControls를 컨테이너에 던져서 한쪽면을 감싸고 다른면을 감쌀 수있게 해줍니다.


정직하게 말하면 이것은 아마도 당신을위한 훌륭한 해결책이 아닙니다. 하나 이상의 차원에서 래핑 할 수있는지도를 그리려한다는 것을 알았다면지도를 여러 타일로 나눕니다. UIScrollView가하는 것처럼 일부 컨테이너보기에서 터치를 감지하고 사용자가 터치를 이동할 때 타일의 위치를 ​​변경합니다. 타일이 보이지 않게 스크롤하여 재사용하여 맵의 새롭게 보이는 영역을 표시합니다. 간단한 경우지도 이미지의 복사본을 두 개만 사용하여 구현할 수 있습니다. 복잡한 경우 UIScrollView를 많이 재현합니다. 표시하는 타일 크기를 조정하고 다른 해상도로 다른 타일 세트를로드하여 메모리 사용을 줄이고 확대/축소하는 동안 해상도를 높이십시오.

+0

이 질문은 아마도 Khrob이 설명한 기능의 종류를 처리하는 방법의 더 좋은 예입니다. http://stackoverflow.com/questions/3071623/make-uiscrollview-wrap-around – Jonah

+0

답변과 링크를 위해 Jonah에게 감사드립니다. 그것으로 놀아, 나는 당신이 분리없이 UIScrollView의 다른 페이지를 접할 수 있다는 것을 몰랐다. 이것은 당신의 기술과 결합하여 트릭을 수행하는 것 같습니다. 내가 기회를 얻 자마자 샘플 앱을 게시하겠습니다. – Khrob

+0

좋아, 내가 따라야 할 행동을 꽤 많이 잡았어. 동일한 이미지로 여러 개의 하위 뷰를 추가하는 대신 하나의 이미지를 두 배로 늘 렸습니다. – Khrob