编辑:我在一个新项目中尝试了这个代码,它按预期工作。 以下代码用于添加的opengl视图(使用cocos2d) [[[CCDirector sharedDirector] openGLView] addSubview:lsvc.view]; 其中lsvc是我的viewcontroller和scrollview。
我的滚动视图有一个奇怪的行为,当我尝试以编程方式滚动滚动视图时,所有在模拟器中工作正常(xcode4,4.3 simul)但在我的设备上无效(4.3.2)
滚动我在pageControl事件中(在值更改时)执行以下操作
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * self.pageControl.currentPage;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:YES];
这就是我在viewdidload
中初始化scrollview的方法self.scrollView.delegate = self;
[self.scrollView setShowsVerticalScrollIndicator:NO];
[self.scrollView setShowsHorizontalScrollIndicator:NO];
self.scrollView.pagingEnabled = YES;
self.scrollView.scrollsToTop = NO;
int page = 0;
int pageNum = 3;
[self.scrollView setContentSize:CGSizeMake(self.scrollView.frame.size.width*pageNum, self.scrollView.frame.size.height)];
for (; page < pageNum; page++) {
LevelViewController *lvlvc = [[LevelViewController alloc] init];
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
lvlvc.view.frame = frame;
[self.scrollView addSubview:lvlvc.view];
// add the viewcontroller to a saved array to keep track
[levelsController addObject:lvlvc];
[lvlvc release];
}
self.pageControl.numberOfPages = page;
通过在设备上平移来滚动滚动视图效果很好,点击页面控件有时会将滚动移动一点(如20点或更少),其余时间它根本不滚动。在模拟器上一切正常。 有人指向一个方向,检查什么,因为我迷路了,我不知道为什么我在模拟器和设备上得到2种不同的行为 我也试过了
[self.scrollView setContentOffset:CGPointMake(frame.size.width * pageNum,0)animated:YES];
这也只适用于模拟器
答案 0 :(得分:1)
我的最新项目遇到了同样的问题。解决方案是将帧速率降低到30 fps,然后执行scrollRectToVisible:然后将其设置回60 fps。
...
[[CCDirector sharedDirector] setAnimationInterval:1.0/30.0];
[scrollView scrollRectToVisible:rect animated:YES];
...
然后在scrollView委托中:
- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
[[CCDirector sharedDirector] setAnimationInterval:1.0/60.0];
}
我没有在委托调用中将其设置回来,因为我使用滚动视图进行了级别选择屏幕,因此进入给定屏幕时我丢弃了帧速率(毕竟没有任何动画),并且离开屏幕我恢复了60 fps。
希望我能帮忙!
答案 1 :(得分:0)
我在viewDidLoad中添加标签以查看您在addSubview之前添加滚动视图
lvlvc.viw.tag = page+100;
self.scrollView addSubview:lvlvc.view];
您的pageControl事件应如下所示
UIView *viewToScroll = [self.scrollView viewWithTag: yorPageControl.currentPage+100];
[self.scrollView scrollRectToVisible:viewToScroll.frame animated:YES];
idee是为您在滚动视图中添加的每个视图设置一个唯一标记。当页面控件改变时,获取currentPage的当前视图,并告诉滚动视图滚动到相应的rect。
祝你好运:D答案 2 :(得分:0)
我遇到了同样的问题,我能想到的唯一解决方案是将scrollRectToVisible动画属性更改为NO。这不是最佳的,但它会让它发挥作用。
我检查过很多其他内容(内存警告,scrollview设置,setContentOffset()),阅读了几十篇类似于此的SO帖子,但没有找到解决方案。视图从不接收scrollRectToVisible调用。我设置了scrollViewDidScroll,当我滑动时我看到它被调用但是scrollRectToVisible调用没有触发它。我发现的唯一一件事就是如果你在scrollRectToVisible设置断点然后继续,它往往会更频繁地工作。所以它可能是UIScrollView API动画的一些时间错误。
答案 3 :(得分:0)
上面的情况并非如此,但就我而言,当我使用 tableView.scrollToRow
时,它可以在模拟器上运行,但在设备上却不起作用。
它在实现为 setContentOffset(:animated:)
, scrollRectToVisible(:animated:method)
时有效。
我找到了here