2011-08-07 3 views
10

UIScrollView의 페이징이 활성화되어 있고 clipToBounds = NO을 설정하여 현재 외부 페이지를 볼 수 있습니다.iOS가 개발 중입니다. 어떻게 UIScrollView의 스크롤 이벤트 응답 영역을 확장?

내가 원하는 것은 사용자가 UIScrollView을 현재 페이지의 일부가 아닌 전체 보이는 영역에서 스크롤 할 수있게하려는 것입니다.

어떻게 구현할 수 있습니까?

감사합니다.

P. 사과 설명서 (http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html)에 따르면 pagingEnabled 속성 값이 YES 인 경우 스크롤보기가 중지됩니다. 유저가 스크롤했을 때에 스크롤 뷰의 경계의 배수.

즉, 페이징 기능을 손상시키지 않고 원하는 것을 얻으려면 UIScrollView의 크기를 조정할 수 없습니다.

답변

12

에게 우선 UIView의에있는 ScrollView를 넣고있는 ScrollView의 clipsToBounds을 해제하려고

확실하지. scrollview는 페이징에 필요한 크기 여야합니다. 스크롤 뷰 바깥쪽에 내용이 표시되지만 페이징은 여전히 ​​동일합니다. 외부 뷰에 대해 clipsToBounce을 활성화하여 스크롤 뷰의 크기를 제한 할 수 있습니다.

보기의 hitTest을 덮어 쓰면 터치를 스크롤보기로 리디렉션 할 수 있습니다. 그러면 스크롤보기 외부를 터치하여 스크롤 할 수도 있습니다.

+0

답을 사용하여 문제를 해결할 수 있었고 그 과정에서 필자는이 간단한 클래스로 끝내고 언제든지 이러한 동작을 자동화 할 수있었습니다. 프레임을 변경하지 않고 뷰의 터치 영역을 확장해야 할 때마다 더 넓은 프레임을 가진 뷰로 래핑하고 뷰의 클래스를이 클래스에 설정합니다. 더 이상 조정하지 않아도 작동합니다. https://gist.github.com/diegoperini/8dfa345fca7c733c411dbec6e93729b0 – diegoperini

7

왜 스크롤 영역의 크기를 조정하여 필요한 영역에 맞 춥니 까? 그것이 도움이됩니다 경우 만있는 UIScrollView pointInside 방법

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    CGRect newBounds = self.bounds; 
    newBounds = CGRectInset(bounds, 0, -100.0f); 
    return CGRectContainsPoint(newBounds, point); 
} 
+0

UIScrollView는 크기를 사용하여 페이징을 계산하므로 크기를 조정하면 페이징 기능이 손상됩니다. 어쨌든 고마워. – AKFish

+0

그에 따라 contentSize를 높이고 하위 뷰 위치를 수정할 수 있습니다. –

+0

이미 시도했습니다. contentSize 권한을 얻는 것은 페이징에 필수적입니다. 내 테스트 결과는 UIScrollView가 해당 프레임 경계 영역 내부의 터치 이벤트에만 응답하고 contentSize는이 문제에 전혀 영향을 미치지 않는다는 것입니다. – AKFish

관련 문제