根据UIScrollView中的滚动旋转滚轮

时间:2012-07-03 10:59:59

标签: iphone objective-c ios xcode uiscrollview

我正在尝试根据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;
}

有人能把我推向正确的方向: - )?

2 个答案:

答案 0 :(得分:3)

您的偏移量和时间设置不正确;实际上,每次收到didScroll消息时,lastOffsetlastTime都会更改为currentOffsetcurrentTime。因此,只有在每条消息之间的间隔超过.1秒时才会触发if语句。既然你说你希望你的滚动顺利,那么这似乎不太可能是你想要的。也许在if语句中移动你的作业?我会看看我是否可以找到另一种方法供您使用。

答案 1 :(得分:2)

为什么不使用该库来执行此操作?我用旋转木马库完成了这个。请参考以下链接 https://github.com/nicklockwood/iCarousel 这很容易实现。