Iphone 分页uiscrollview自动滚动到第一页
我一直在开发一个页面滚动视图,其中包含多个图像和一个作为内容表的tableview。 使用该表,我可以跳转到特定页面。除了跳转到页面的方法外,我的一切都正常工作。当我触摸屏幕时,滚动视图会转到第一页,除非我滚动到下一页。这几天我都快发疯了:s 这是我的密码:Iphone 分页uiscrollview自动滚动到第一页,iphone,ios,uiscrollview,paging,Iphone,Ios,Uiscrollview,Paging,我一直在开发一个页面滚动视图,其中包含多个图像和一个作为内容表的tableview。 使用该表,我可以跳转到特定页面。除了跳转到页面的方法外,我的一切都正常工作。当我触摸屏幕时,滚动视图会转到第一页,除非我滚动到下一页。这几天我都快发疯了:s 这是我的密码: -(void)skipToPage { NSInteger temp = [selectedPage integerValue]; [pagingScrollView setContentOffset:
-(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 page方法,该方法准备要显示的每个图像
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self tilePages];
}
这是一种来自苹果公司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];
}
}
}
-(无效)瓷砖路面板
{
//计算哪些页面是可见的
CGRect visibleBounds=pagingScrollView.bounds;
int firstneedpageindex=floorf(CGRectGetMinX(visibleBounds)/CGRectGetWidth(visibleBounds));
int lastNeedPageIndex=floorf((CGRectGetMaxX(visibleBounds)-1)/CGRectGetWidth(visibleBounds));
firstNeedPageIndex=MAX(firstNeedPageIndex,0);
LastNeedPageIndex=MIN(LastNeedPageIndex[自映像计数]-1);
//回收不再可见的页面
用于(可视页面中的ImageScrollView*页面){
如果(page.indexlastneedpageindex){
[recycledPages添加对象:页面];
[page removeFromSuperview];
}
}
[visiblePages minusSet:recycledPages];
//添加缺少的页面
对于(int index=firstneedpageindex;index我不能完全确定您描述的问题是什么。因此,我对您看到的问题的理解是:
- 单击表格视图时,您正在调用SkipTopPage消息,正确设置滚动视图的内容偏移量,并显示正确的页面
- 点击视图时,它会跳转到第一页
如果你能澄清这句话,可能会有帮助:
除了跳转到页面方法
当我触摸屏幕时,会显示
将视图滚动到第一页,除非我
滚动到下一页
- 当你“触摸屏幕”时,应用程序的状态是什么
- 您是否正在触摸表视图,然后调用SkipTopPage
- tableview是第一页上scrollview的子视图吗
假设这就是正在发生的事情(如果我遗漏了什么,请纠正我)。你能在下面的消息(和邮编)中检查一下你在做什么吗
如果您正在调整这些消息中的内容偏移量,您可能会从滚动视图中获得意外行为。我让它工作了
该问题是由导航控制器引起的,导航控制器与PhotoScroller示例应用程序反应不好!要解决此问题,请将scrollview设置为标准UIView的子视图,如:
UIView *view = [[UIView alloc] initWithFrame:pagingScrollViewFrame];
[view addSubview:pagingScrollView];
self.view = view;
谢谢:)您是否检查了NSInteger temp
变量的值?可能这始终是0?我确实检查了,而且它是正确的页码!我可以转到并显示正确的页面,但当我触摸屏幕时,它会滚动到开头。感谢您的回答。是的,我正在从tableview调用SkipTopPage,它是一个单独的viewcontr当滚动视图显示时,我在正确的页面上,但当我触摸屏幕时(滚动除外)它会移到第一页。@Ahmed所以当你点击屏幕而不是拖动滚动视图时?拖动滚动视图是有效的,但点击会跳转到第一页?没错!我编辑了我的问题以包含我使用的代码。我没有使用DidendDecelling委托方法。@Ahmed看起来你没有在视图中设置内容偏移量idscroll.你在为图像视图上的触摸事件做任何事情吗?这正是困扰我的问题!我只在SkipTopPage方法中设置内容偏移量。触摸事件只显示/隐藏顶部栏。正如我所说,如果我滚动所有内容,即使触摸事件也可以正常工作。我猜它来自SkipTopPage。很高兴你解决了这个问题。一个n请注意此代码。您正在此处分配UIView对象(保留计数1),然后将其分配给保留属性(保留计数2),因此在释放控制器时将出现内存泄漏。您需要使此UIView自动释放。:)啊内存管理:)我仍然有问题。谢谢提示!
UIView *view = [[UIView alloc] initWithFrame:pagingScrollViewFrame];
[view addSubview:pagingScrollView];
self.view = view;