的UIScrollView - (反弹= NO)似乎重写(pagingEnabled = YES)

2019-08-07 20:05发布

我有一个在它的寻呼一个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

Answer 1:

最好的办法是写一个UIScrollView子类,手动执行所需的行为。 你应该能够开始与pagingEnabledbounces都设置为YES ,然后覆盖-setContentOffset:用自己的方法夹子夹住。



文章来源: UIScrollView - (bounces = NO) seems to override (pagingEnabled = YES)