Как я могу реализовать механизм круговой прокрутки?

У меня есть несколько изображений, из которых пользователь должен выбрать одно. Теперь я не хочу просто предлагать плоскую область прокрутки со скучной сеткой. Вместо этого я хотел бы показать колесо, содержащее эти изображения. Вверху будет маркер, указывающий на выбор. Что-то похожее на пикеров.

Проблема не в вращении; Я бы использовал для этого некоторые геометрические функции. Но я понятия не имею, как на самом деле получить жесты прокрутки на этом колесе. С чего мне начать?

Кстати: под круговым я не имею в виду что-то вроде Pickers. Я имею в виду настоящее колесо с центральной осью, которое можно катить. Как очень старые телефоны, как велосипедное колесо. Или пикер, повернутый на 90° осью к вам (координата Z).


person Thanks    schedule 06.05.2009    source источник
comment
Вы спрашиваете, как фиксировать жесты?   -  person    schedule 06.05.2009
comment
Да, я думаю, что вопрос может подразумевать это, но я не был уверен, нужно ли мне это делать.   -  person Thanks    schedule 06.05.2009


Ответы (2)


Если вы говорите о захвате жестов, то вот пример, который они приводят в документации.

Хотя я мог бы поклясться, что слышал, как Алан Каннистраро сказал в одном из первых CS193P лекции о том, что вам не нужно этого делать, что вы можете просто перехватить событие смахивания, но я не могу этого найти.

Может ли кто-нибудь, кто действительно знает, что они делают, поправьте меня, и я удалю этот пост, но пока я знаю, что это сработает:

#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.
    }
}
person Community    schedule 06.05.2009

Как вы думаете, насколько это похоже на представление выбора? Вы можете загрузить представление выбора со своими собственными пользовательскими подпредставлениями, которые могут быть изображениями. Это даст вам фактический вид выбора с вашими изображениями, который может быть или не быть тем, к чему вы на самом деле стремитесь.

person Tom Harrington    schedule 06.05.2009
comment
На самом деле сборщик прокручивается только вертикально. Я ищу способ реализовать круглое колесо. Представьте велосипедное колесо, у которого есть ось, а на каждом шипе висит изображение. Вы можете повернуть это колесо. А вверху есть стрелка, показывающая, какой из них выбран в данный момент. Как старые механические кухонные часы-яйцо или очень старые телефоны, в которых для набора номера используется колесо. - person Thanks; 07.05.2009