2011-03-07 1 views
5

내 iPad 앱에서 확대/축소 UIScrollView를 사용하여 이미지를 표시하고 있습니다. 핀치로 인해 이미지가 더 작거나 클 수 있습니다. 나는 또한 bouncesZoom을 사용하도록 설정하여 사용자가 너무 멀리까지 늘리면 최대 또는 최소 줌으로 되돌아 오도록 설정할 수 있습니다.UIScrollView 줌 바운스를 취소하려면 어떻게해야합니까?

이제 꼬집음이 최소 확대/축소 크기보다 10 % 작은 이미지로 끝나면 바운스가 일어나지 않도록 방지하고 이미지를 " 닫아. 이렇게하면 일종의 "집어 치우기"제스처가 생길 수 있습니다. 내가이 일을 함께 올 한 것은, 가장 간단한에, 이것이다 : 이것은 이미 튀는 것이 시점에서 제외하고, 잘 작동, 그래서

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    if (self.zoomBouncing && zoomedToScale/self.minimumZoomScale < 0.90) { 
     // We've let go and were under 90% of the minimum size. 
     self.minimumZoomScale = zoomedToScale; 
     [self shrinkImageToNothing]; 
    } else { 
     // How far have we gone? 
     zoomedToScale = self.zoomScale; 
    } 
} 

minimumZoomScale의 설정은 아무것도하지 않는다. 따라서 바운스와 수축이 동시에 발생합니다. 상상할 수 있듯이 이상하게 보입니다.

내 질문은 : 어떻게하면이 특정 상황에서만 바운스가 일어나지 않도록 할 수 있습니까? 제스처가 끝나고 UIScrollView가 다시 튀어 오르기로 결정할 때 사이에서 뭔가 할 수있는 UIScrollViewDelegate 메서드가 없습니다. 나는 포함, 행운과 다른 기술의 무리를 시도했다 : 내 90 % 줌 임계 값이 통과되면

  • –viewForZoomingInScrollView:에서 nil 반환. 줌의 모든 포인트가 아니라 제스처가 시작될 때이 메서드가 호출되기 때문에 작동하지 않습니다.
  • 확대/축소 비율이 90 % 미만인 경우 bouncesZoom-scrollViewDidZoom:으로 설정하고 90 % 이상인 경우 true로 설정하십시오. bouncesZoom이 거짓 일 때 크기를 허용하지 않기 때문에 90 % 이하로 내려 가면 이미지를 크게 왜곡합니다.
  • -touchesEnded:withEvent 메서드를 추가하는 중입니다. 절대로 불리지 않는다.
  • 내 자신의 UIPinchGestureRecognizer를 추가하여 UIScrollView의 자체 핀치 인식기와 동시에 실행합니다. UIScrollView의 집어 넣기 동작 후에 핸들러 (및 대리자 메서드)가 으로 호출되기 때문에 작동하지 않습니다. 제스처가 그 사실을 알리기 전에 바운스하기로 결정합니다. 광산을 추가하고 핵심 제스처를 다시 추가하여 모든 핵심 제스처를 제거하려고했습니다. 하지만 내 몸짓은 이고, UIScrollView가 튀어 오르는 것을 결정한 후에도 여전히이 호출되었습니다.

저는 약간의 상실감이 있습니다. 다른 사람이 이렇게하려고했습니다.

답변

3

이 질문을 쓰면 솔루션을 찾는 데 도움이되었습니다. 그리고 다행히도, 그것은 아주 쉽습니다! 그래서, 첫 번째 단계는, 코드가 minimumZoomScale이고, 나는 또한 같은 값으로 cachedMinZoomScale ivar를 설정합니다.

기본적으로
- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    if (self.zoomScale/cachedMinZoomScale < 0.90) { 
     self.minimumZoomScale = self.zoomScale; 
    } else { 
     self.minimumZoomScale = cachedMinZoomScale; 
    } 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { 
    if (self.zoomScale/cachedMinZoomScale < 0.90) { 
     [self shrinkImageToNothing]; 
    } 
} 

는, 스크롤 뷰가 확대되면, 현재의 줌 배율에 -self.minimumZoomScale을 유지 : 규모가 최소의 90 % 미만이 사실은 꽤 직선적 인 경우에두고, 탄력을 받고 일하지 실제 최소값의 90 %보다 작 으면 다른 모든 줌 배율에서 실제 최소값으로 설정하십시오. 그런 다음 줌이 끝나면 90 % 임계 값보다 낮 으면 이미 최소 크기가 될 것이므로 스냅하지 않고 새 애니메이션을 닫아서 닫습니다.

심플. 휴!

+2

shrinkImageToNothing은 무엇이고 cachedMinZoomScale은 설정되는 위치는 무엇입니까? – jjxtra

-2

시도해보십시오. [imageScrollview setBounces : NO];

+0

질문에 설명 된대로 다른 이유로이 기능을 사용할 수 있습니다. 대답은 내가 가진 필요를 해결합니다. – theory

7

이 속성을 NO로 설정해야합니다. (예 : ViewDidLoad에서)

scrollView.bouncesZoom = NO;