UIScrollView - (反弹=否)似乎覆盖(pagingEnabled =是)

问题描述:

我有一个UIScrollView与分页(所以典型的模型与UIPageControl和页面之间左右拖/甩),我有工作正常。奇怪的是,当我想摆脱反弹(这样你就不会看到左侧和右侧UI背后的黑色)时,突然分页不再有效。UIScrollView - (反弹=否)似乎覆盖(pagingEnabled =是)

换句话说,当:

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子类,手动执行所需的行为。您应该可以从pagingEnabledbounces开始,它们都设置为YES,然后用您自己的方法覆盖-setContentOffset:以剪切边缘。

+0

哇,这很愚蠢。那么,我会试试看,你可能只是这个话题中的“大赢家”。 – Eli 2009-09-21 18:14:55

+0

它的工作原理,但你需要重写-setContentOffset,而不是-setContentOffset:动画,因为后者将调用一个并不总是调用的函数,而前者覆盖contentOffset的mutator函数,以便捕获所有的情况。 – Eli 2009-09-22 18:19:36

+0

这很奇怪。我做了很多类似的事情,通常单参数方法会调用具有动画的动画变体:YES – rpetrich 2009-09-22 20:30:00