2012-06-05 4 views
7

UIScrollView의 왼쪽/오른쪽 스크롤에 제한을 설정하는 가장 좋은 방법은 무엇입니까? 나는 이것이 쉬운 일일 것이라고 생각했지만 모든 시도는 성공적이지 못했다.iOS. UIScrollview 스크롤을 제한된 범위로 제한하려면 어떻게합니까?

분명히 말해서, 앱을 사용할 때마다 스크롤 범위를 프로그래밍 방식으로 제한 할 수있는 솔루션이 필요합니다. 이것은 대개 표시되는 데이터의 변경에 대한 응답 일 것입니다.

감사합니다,
더그

답변

-4

: 같은

기본적으로 코드가 보일 수 있습니다.

의사 코드 :

Calculate criteria for constraining pan 
if (pan-constraint-is-met) { 

    Calculate pan-limit 
    [self setContentOffset:limitedContentOffset]; 

} 
7

은 당신이해야 할 모든은 다음 코드로 스크롤 뷰의 콘텐츠 크기를 변경합니다.

[scrollView setContentSize:CGSizeMake(width, height)];

+0

내 경우에는 내가 어쨌든의 내용을 변경할 수 없습니다. 시각화 앱을 만들고 있으며 콘텐츠 크기는 시각화에 충분합니다. 내가 찾고있는 것은 minimumZoomScale과 maximumZoomScale에 대한 유사점이다. 이 값을 변경해도 내용에는 아무런 영향을 미치지 않습니다. – dugla

11

당신은 스크롤 뷰의 contentSize 속성을 사용하여 내용의 크기를 제어 할 수 있습니다. 그만큼 충분하지 않은 경우 (예 : 스크롤 영역을 콘텐츠 중간의 임의의 영역으로 제한해야하는 경우) 스크롤보기의 델리게이트 메소드에서 contentOffset을 필수 제한값으로 강제 설정할 수 있습니다. 내 과부하 layoutSubviews 방법에 팬 제약을 배치하는 내 접근했다

- (void) scrollViewDidScroll:(UIScrollView*)scroll{ 
    CGPoint offset = scroll.contentOffset; 

    // Check if current offset is within limit and adjust if it is not 
    if (offset.x < minOffsetX) offset.x = minOffsetX; 
    if (offset.y < minOffsetY) offset.y = minOffsetY; 
    if (offset.x > maxOffsetX) offset.x = maxOffsetX; 
    if (offset.y > maxOffsetY) offset.y = maxOffsetY; 

    // Set offset to adjusted value 
    scroll.contentOffset = offset; 
} 
+0

블라디미르, 나는 실제로 당신의 솔루션과 비슷한 접근 방식을 발견했습니다. 내 scrollView 하위 클래스의 layoutSubViews를 오버라이드하고 scrollViewDelegate에서 수행중인 것과 비슷한 클램핑을 수행합니다. 나는 실제로 어떤 접근이 바람직한 지 확신하지 못한다. 위젯 메서드가 layoutSubviews 후에 실행된다는 것을 상기합니다. 이견있는 사람? – dugla

+0

이렇게하면 페이징을 사용할 때 페이징이 제대로 작동하지 않을 때 문제가 발생합니다. – moligaloo

관련 문제