문제

페이징이있는 uiscrollview가 있습니다 (따라서 UipageControl과 페이지 사이에 왼쪽과 오른쪽을 드래그/튕기는 일반적인 모델). 이상한 점은 튀는 것을 없애고 싶을 때 (왼쪽과 오른쪽에서 UI 뒤에 검은 색을 볼 수 없다는 것) 갑자기 더 이상 페이징이 작동하지 않는다는 것입니다.

다시 말해, 언제 :

scrollView.pagingEnabled = YES;
scrollView.bounces = YES;

페이지 (0)과 페이지 (길이 -1)에서 튀는 것을 좋아하지 않는 것을 제외하고는 모든 것이 잘 작동합니다. 그러나 내가 이것을 할 때 :

scrollView.pagingEnabled = YES;
scrollView.bounces = NO;

각 페이지에서 제자리에 끼워지는 대신 모든 페이지를 하나의 긴 페이지로 처리합니다. 그래서 어떤 이유로 페이징은 튀는 것에 의존하는 것 같습니다. 어떻게 든 튀는 것을 막을 수있는 한 괜찮습니다. 그렇다면 그것을 제거하는 또 다른 방법이 있습니까? 아니면 내가 잘못하고있는 일이 있습니까?

편집하다:해결책:

@interface PagingScrollView : UIScrollView
@end

@implementation PagingScrollView

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame])
    {
        self.pagingEnabled = YES;
        self.bounces = YES;
    }
    return self;
}

- (void)setContentOffset:(CGPoint)offset
{
    CGRect frame = [self frame];
    CGSize contentSize = [self contentSize];
    CGPoint contentOffset = [self contentOffset];

    // Clamp the offset.
    if (offset.x <= 0)
        offset.x = 0;
    else if (offset.x > contentSize.width - frame.size.width)
        offset.x = contentSize.width - frame.size.width;

    if (offset.y <= 0)
        offset.y = 0;
    else if (offset.y > contentSize.height - frame.size.height)
        offset.y = contentSize.height - frame.size.height;

    // Update only if necessary 
    if (offset.x != contentOffset.x || offset.y != contentOffset.y)
    {
        [super setContentOffset:offset];
    }
}

@end
도움이 되었습니까?

해결책

가장 좋은 방법은 글을 쓰는 것입니다 UIScrollView 서브 클래스 및 원하는 동작을 수동으로 구현하십시오. 당신은 시작할 수 있어야합니다 pagingEnabled 그리고 bounces 둘 다 설정합니다 YES 그런 다음 덮어 씁니다 -setContentOffset: 가장자리를 클립하는 자신의 방법으로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top