2011-07-05 55 views
0

編輯:請參閱下面的答案。PagingEnabled用於UIScrollView中的多個頁面

我終於放棄,來這裏問你對我的問題...

我使用的是與小圖標的滾動菜單,一個UIScrollView。 在每個啓用了分頁功能的頁面上,中間有一個圖標,左側和右側有2個半其他可見圖標。我可以從一個圖標移動到它的鄰居,這很好,但重點是如果我快速滾動,它將不會從超過3個圖標移動,這是圖像的寬度。

我想要的是能夠滾動超過3個圖標,並且磁鐵行爲只在緩慢時觸發。

我試着安排滾動視圖來計算它的速度,並且當它快速移動時將pagingEnabled屬性設置爲NO,當它放慢時再次設置YES,但只要將它設置爲YES,視圖就會來到回到原來的位置非常快,好像它沒有檢測到我已經把它帶到了一個新的頁面。有誰知道它爲什麼這樣做?如果我有辦法告訴視圖「確定,現在分頁已啓用,但看起來,你在15頁之後,只是在當前頁面的中心,不要在開始時回來。」

這是我的更新功能(如果它可以幫助):

-(void)update:(ccTime)dt { float velocity = fabsf((self.previousOffset-self.scrollView.contentOffset.y)/dt); self.previousOffset = self.scrollView.contentOffset.y; CCLOG(@"Velocity: %f", velocity); if(self.scrollView.pagingEnabled) { if(velocity > 100) { self.scrollView.pagingEnabled = NO; } } else { if(velocity < 100) { self.scrollView.pagingEnabled = YES; } } }

回答

0

我終於找到了解決辦法,這是很明顯的,但我沒有在一開始看到的,通過使用在setContentOffset滾動視圖。

這是新的更新功能:

-(void)update:(ccTime)dt 

{ 

    float velocity = 1000; 
    if(self.previousOffset) 
    { 
     velocity = fabsf((self.previousOffset-self.scrollView.contentOffset.y)/dt); 
    } 
    self.previousOffset = self.scrollView.contentOffset.y; 

    if(velocity < 300) 
    { 

     CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
     float halfScreen = screenSize.width/2; 
     CCLayer *panel = (CCLayer *)[self getChildByTag:1]; 
     SQScrollViewMenu *menu = (SQScrollViewMenu *)[panel getChildByTag:1]; 
     SQMissionItem *currentItem = (SQMissionItem *)[menu getChildByTag:currentPage]; 

     float contentOffsetY = [self.scrollView contentOffset].y; 
     CCLOG(@"Currentpage: %i ; currentoffsetY: %f", currentPage, contentOffsetY); 
     float distance = contentOffsetY + [currentItem position].x - halfScreen + panel.position.x + menu.position.x + panel.parent.position.x - 60; 
     CCLOG(@"Which gives a distance of: %f", distance); 

     [self.scrollView setContentOffset:CGPointMake(0, distance) animated:YES]; 
     self.previousOffset = 0; 
     [self unschedule:@selector(update:)]; 
     CCLOG(@"Is unscheduled"); 
    } 
} 

而且幾乎工作......至少,它是在模擬器。但只要我在iPhone 4上試用它,它就不再起作用了。它總是進入該更新函數,但8次中的7次,它只是阻止scrollView,因爲它不會拖回到我給它的位置......但有時它會。

有沒有人有想法?我在網上發現了類似的問題,但他們都無法解決這個問題...

相關問題