基于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;
}

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

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

你为什么不使用库来做到这一点?我已经使用轮播库完成了此操作。请参考以下链接https://github.com/nicklockwood/iCarousel这很容易实现,而且更好。

最新更新