分页uiscrollview会自动滚动到第一页

时间:2011-03-09 10:46:13

标签: iphone ios uiscrollview paging

我一直在处理一个分页滚动视图,其中有几个图像和一个tableview作为内容表。 使用该表我可以跳转到特定页面。除了跳转到页面方法之外,我已经完成了所有工作,当我触摸屏幕时将滚动视图带到第一页,除非我滚动到下一页。在过去的几天里,它一直让我疯狂:s

这是我的代码:

-(void)skipToPage {     
    NSInteger temp = [selectedPage integerValue];   
    [pagingScrollView setContentOffset:
    [self offsetForPageAtIndex:temp] animated:NO];  
    pagingScrollView.contentSize = [self contentSizeForPagingScrollView]; 
}

- (CGPoint)offsetForPageAtIndex:(NSUInteger)index {                                                                                                        
    CGRect pagingScrollViewFrame = [self frameForPagingScrollView];                                                                                        
    CGPoint offset;                                                                                                                                        
    offset.x = (pagingScrollViewFrame.size.width * index);                                                                                                 
    offset.y = 0;                                                                                                                                          
    return offset;                                                                                                                                         
}  

先谢谢你们!

编辑:scrolviewDidScroll调用Tile页面方法,准备要显示的每个图像

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [self tilePages];   
}

这是来自Apple

的photoScroller样本的方法
- (void)tilePages 
{
    // Calculate which pages are visible
    CGRect visibleBounds = pagingScrollView.bounds;
    int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds) / CGRectGetWidth(visibleBounds));
    int lastNeededPageIndex  = floorf((CGRectGetMaxX(visibleBounds)-1) / CGRectGetWidth(visibleBounds));
    firstNeededPageIndex = MAX(firstNeededPageIndex, 0);
    lastNeededPageIndex  = MIN(lastNeededPageIndex, [self imageCount] - 1);

    // Recycle no-longer-visible pages 
    for (ImageScrollView *page in visiblePages) {
        if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) {
            [recycledPages addObject:page];
            [page removeFromSuperview];
        }
    }
    [visiblePages minusSet:recycledPages];

    // add missing pages
    for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) {
        if (![self isDisplayingPageForIndex:index]) {
            ImageScrollView *page = [self dequeueRecycledPage];
            if (page == nil) {
                page = [[[ImageScrollView alloc] init] autorelease];
            }
            [self configurePage:page forIndex:index];
            [pagingScrollView addSubview:page];
            [visiblePages addObject:page];
        }
    }

}

2 个答案:

答案 0 :(得分:2)

我搞定了!

问题是由导航控制器引起的,该控制器与PhotoScroller示例应用程序反应不佳!解决它使scrollview成为标准UIView的子视图,如:

UIView *view = [[UIView alloc] initWithFrame:pagingScrollViewFrame];
    [view addSubview:pagingScrollView];

    self.view = view;

谢谢:)

答案 1 :(得分:0)

我不完全确定你所描述的问题是什么。所以我对你所看到的问题有所了解:

  • 当您点击表格视图时,您正在调用 skipToPage 消息,正确设置滚动视图的内容偏移量并显示正确的页面?

  • 当您点按视图时,它会跳转到第一页?

如果你能澄清这句话可能会有所帮助:

  

除了跳转到页面方法之外   当我触摸屏幕带来的时候   滚动视图到第一页除非我   滚动到下一页。

  • 当您“触摸屏幕”时应用的状态是什么?
  • 您是否正在触摸表格视图,然后调用 skipToPage
  • tableview是第一页上滚动视图的子视图吗?

所以假设这是正在发生的事情(如果我错过了什么,请纠正我)。你可以在以下消息(和邮政编码)中查看你在做什么:

(void)scrollViewDidScroll:(UIScrollView *)sender;
(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

如果您正在调整这些消息中的内容偏移量,则可能会从滚动视图中获得意外行为。