2011-05-11 102 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

相關問題