2011-05-11 49 views
1

编辑:我试过这个代码在一个新的项目,它按预期工作。 下面的代码是在opengl视图(使用cocos2d)的基础上添加的 [[[CCDirector sharedDirector] openGLView] addSubview:lsvc.view]; 其中lsvc是具有scrollview的我的viewcontroller。scrollView scrollRectToVisible在模拟器上工作,而不是在设备上工作

我有我的滚动视图一个奇怪的现象,当我尝试以编程方式滚动滚动视图所有在模拟器工作正常(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中

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; 

第滚动滚动视图通过平移设备上的滚动视图效果很好,点击pageControl有时会将滚动稍微移动一点(如20分或更少),其余时间根本不滚动。在模拟器上一切正常。 可以在一个方向,什么检查,因为即时通讯丢失了,我不知道为什么我得到模拟器2种不同的行为和装置 我也曾尝试

[self.scrollView setContentOffset有人点:CGPointMake(frame.size .width * pageNum,0)animated:YES];

,这也仅在模拟器上工作

+0

我与我的UIScrollView有同样的问题。你有没有发现它? – 2011-09-15 07:44:49

回答

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将为您在滚动视图中添加的每个视图设置唯一标记。当页面控件更改时,获取当前页面的当前视图并告诉滚动视图滚动到corespondent矩形。

好运:d

+0

同样的问题。这个代码在模拟器中对我很好,但是在设备中没有工作(我用不同的方法做了同样的事情,没有使用标签,但保存了一系列视图) – ultrak 2011-05-11 08:04:41

+0

很奇怪。您是否尝试从产品菜单清理 - >清理,并从设备中删除应用程序并重建? – 2011-05-11 08:23:30

+0

也尝试过,没有任何改变..我会尝试在新项目中面食我的代码并检查出来。不知道为什么设备上的行为与模拟器不同? – ultrak 2011-05-11 23:33:45

0

我碰到的这个同样的问题,唯一的解决办法我能想出是改变下,scrollRectToVisible动画属性为NO。这不是最佳的,但它会使它工作。

我检查了很多其他的事情(内存不足警告,滚动视图设置,setContentOffset()),通过几十个SO职位类似这样的阅读和无解被发现。 scrollRectToVisible调用从不被视图接收。我设置了scrollViewDidScroll,当我滑动时看到它被调用,但scrollRectToVisible调用不会触发它。我发现的唯一情况是,如果您在scrollRectToVisible上设置了一个断点,然后继续,它往往会更频繁地工作。所以这可能是一些UIScrollView API动画的计时错误。

1

我对我最近的项目有同样的问题。解决方案是将帧率降低到30 fps,然后执行scrollRectToVisible:然后将其设置回60 fps。

- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 
    [[CCDirector sharedDirector] setAnimationInterval:1.0/60.0]; 
} 

我没有把它背在委托调用,因为我哈德与滚动视图的水平选择屏幕,所以在进入定屏幕我放弃了:

... 
[[CCDirector sharedDirector] setAnimationInterval:1.0/30.0]; 
[scrollView scrollRectToVisible:rect animated:YES]; 
... 
在滚动视图代表

然后帧速率(毕竟没有任何动画),并离开屏幕我恢复了60 fps。

希望我能帮上忙!

+0

这是正确的 - 刚才有同样的问题:Apple的代码被破坏并且依赖于帧率,无论它是否会被调用。 – Adam 2012-10-08 15:52:14

相关问题