3

UIScrollView のスクロールに基づいてホイールをスムーズに回転させようとしています。スクロールビューのスクロールがほとんど停止したときに緩和したいと思います。

私は多くのことを試みましたが、これまでのところ失敗しました。現在のコードは次のとおりです。

#pragma mark - Scrollview delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat pageWidth = scrollView.frame.size.width;
    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    NSLog(@"Offset: %@ Page: %i", NSStringFromCGPoint(scrollView.contentOffset), page);

    UIImageView* leftWheelImageView = (UIImageView*)[self.carImageView viewWithTag:10];

    // Calculate speed of scrolling and turn the wheels to it
    CGPoint currentOffset = scrollView.contentOffset;
    NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];

    if(lastTime - currentTime > 0.1) {
        CGFloat distance = currentOffset.x - lastOffset.x;
        CGFloat scrollSpeedNotAbs = (distance * 10) / 1000; //in pixels per millisecond        
        CGFloat scrollSpeed = fabsf(scrollSpeedNotAbs);

        leftWheelImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(2*3.14*99));
        NSLog(@"Rotate wheel");
    }

    lastOffset = currentOffset;
    lastTime = currentTime;
}

誰かが私を正しい方向に押してくれませんか:-)?

4

2 に答える 2

3

オフセットと時間を正しく設定していません。そのままで、didScroll メッセージを受け取るたびにlastOffsetandlastTimeに変更されてcurrentOffsetいます。currentTimeしたがって、if ステートメントは、各メッセージ間に 0.1 秒以上ある場合にのみトリガーされます。スクロールをスムーズにしたいと言ったので、これが意図したものであるとは思えません。if ステートメント内で割り当てを移動することはできますか? あなたが使用できる別の方法を見つけることができるかどうかを確認します。

于 2012-07-03T12:25:47.007 に答える
2

これを行うためにライブラリを使用しないのはなぜですか? 私は carousel library を使用してこれを行いました。次のリンクを参照してください https://github.com/nicklockwood/iCarousel これは簡単で実装しやすいです。

于 2013-01-14T11:13:13.017 に答える