【问题标题】:Rotate wheel based on scrolling in a UIScrollView基于 UIScrollView 中的滚动来旋转滚轮
【发布时间】:2012-07-03 10:59:58
【问题描述】:

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

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

【问题讨论】:

  • scrollViewDidEndDecelerating怎么样?
  • 好吧,我可以在 didscroll 方法中获得速度。我想以此为基础进行轮换。也许如果你有一些 sn-ps 我可以看看你的意思
  • 我可以向您推荐一个很好的库,我认为它会让您的问题变得更容易。
  • 用户会滚动滚动视图还是自动滚动? (即可预测)。
  • 需要两者兼得

标签: iphone objective-c ios xcode uiscrollview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您为什么不使用该库来执行此操作?我已经使用轮播库完成了这项工作。请参考以下链接 https://github.com/nicklockwood/iCarousel 这很容易并且更好地实施。

    【讨论】:

    • 使用UIScrollView的原生系统惯性会更好。
    • 是的,任何时候都可以更好地使用本机功能,但我只是建议了一种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多