【问题标题】:How can I implement a circular scrolling mechanism?如何实现循环滚动机制?
【发布时间】:2009-05-06 15:40:33
【问题描述】:

我有一些图像,用户应该从中选择一个。现在我不想只提供一个带有无聊网格的平面滚动区域。相反,我想展示一个包含这些图像的轮子。顶部将是一个指示选择的标记。类似于 Pickers 的东西。

问题不在于轮换;我会为此使用一些几何函数。但我不知道如何真正获得那个轮子上的滚动手势。我必须从哪里开始?

顺便说一句:关于循环,我不是指像 Pickers 这样的东西。我的意思是一个真正的轮子,它有一个中心轴并且可以滚动。像非常古老的电话,像自行车轮子。或者将 Picker 旋转 90°,使轴朝向您(Z 坐标)。

【问题讨论】:

  • 你在问如何捕捉手势?
  • 是的,我认为这个问题可能暗示了这一点,但我不确定是否需要这样做。

标签: iphone cocoa-touch uikit gesture-recognition


【解决方案1】:

如果您在谈论捕捉手势,那么这里是 the example they give in the docs

虽然我可以发誓我听到 Alan Cannistraro 在第一个 CS193P lectures 中说你不必这样做,你可以捕获滑动事件,但我找不到。

真正知道他们在做什么的人可以纠正我,我会删除这篇文章,但现在我知道这会起作用:

#define HORIZ_SWIPE_DRAG_MIN  12
#define VERT_SWIPE_DRAG_MAX    4

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    startTouchPosition = [touch locationInView:self];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self];

    // If the swipe tracks correctly.
    if (fabsf(startTouchPosition.x - currentTouchPosition.x) >= HORIZ_SWIPE_DRAG_MIN &&
        fabsf(startTouchPosition.y - currentTouchPosition.y) <= VERT_SWIPE_DRAG_MAX)
    {
        // It appears to be a swipe.
        if (startTouchPosition.x < currentTouchPosition.x)
            [self myProcessRightSwipe:touches withEvent:event];
        else
            [self myProcessLeftSwipe:touches withEvent:event];
    }
    else
    {
        // Process a non-swipe event.
    }
}

【讨论】:

    【解决方案2】:

    您认为与选择器视图有多相似?您可以使用自己的自定义子视图加载选择器视图,这些子视图可以是图像视图。这将为您提供包含图像的实际选择器视图,这可能是您的实际目标,也可能不是。

    【讨论】:

    • 没有选择器在现实中只是垂直滚动。我正在寻找一种实现圆形轮子的方法。想象一个有轴的自行车轮子,每个钉子上都挂着一个图像。你可以转动那个轮子。顶部有一个箭头,显示当前选择的是哪一个。就像老式的机械厨房鸡蛋钟,或者使用轮子拨号的非常古老的电话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2011-06-10
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多