2011-07-05 12 views
0

編集:以下の回答を参照してください。UIScrollViewの複数ページのページング有効化

私は小さなアイコンでスクロールメニューのUIScrollViewのを使用しています...

をついにあきらめ、私の問題をお願いしに来ました。 各ページでは、ページングが有効になっていて、中央にアイコンがあり、左右に表示されるアイコンが2つずつあります。あるアイコンからその隣に移動することはできますが、それは問題ありませんが、速いスクロールを行うと、画面の幅である3つ以上のアイコンから移動しません。

3つ以上のアイコンをスクロールすることができ、磁石の動作が遅くなったときにのみ起動されることが必要です。

スピードを計算するためにスクロールビューをスケジュールしようとしました。スピードが速いときはpagingEnabled属性をNOに設定し、減速しているときは再びYESに設定しましたが、YESに設定されるとすぐにビューが表示されますあたかも私が新しいページに持ってきたことを検出していないかのように、元の位置で非常に速く戻る。誰がなぜこれを行うのか知っていますか?そして、私がビューを "okにする方法があれば、ページングは​​有効になっていますが、見て、15ページ後です。現在のページを中心に、最初から戻ってこないでください。 (それは助けることができる場合)

は、ここに私の更新機能です:上setContentOffsetを使用することにより、

-(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

は私が最終的にかなり明白だった解決策を見つけたが、私は最初に見なかったことscrollViewここで

は、新しい更新機能である:

-(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をそのままブロックし、それを私が与えた位置にドラッグしませんが、時々そうなります。

アイデアはありますか?私はネット上で同様の問題を発見しましたが、いずれもこの問題を解決できませんでした。

関連する問題