Как реализовать механизм круговой прокрутки?
-
06-07-2019 - |
Вопрос
У меня есть несколько изображений, из которых пользователь должен выбрать одно. Теперь я не хочу просто предлагать плоскую область прокрутки со скучной сеткой. Вместо этого я хотел бы показать колесо, которое содержит эти изображения. В верхней части будет маркер, указывающий на выбор. Что-то похожее на сборщиков.
Проблема не в вращении; Я бы использовал некоторые геометрические функции для этого. Но я понятия не имею, как на самом деле получить жесты прокрутки на этом колесе. С чего мне начать?
Кстати: с круговым я не имею в виду что-то вроде сборщиков. Я имею в виду реальное колесо, которое имеет центральную ось и может катиться. Как очень старые телефоны, как велосипедное колесо. Или пикер, повернутый на 90 & # 176; лицом к вам (ось Z).
Решение
Если вы говорите о захвате жестов, то вот пример, который они приводят в документах .
Хотя я мог поклясться, я слышал, как Алан Каннистраро сказал в одном из первых 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.
}
}
Другие советы
Насколько вы похожи на вид сборщика? Вы можете загрузить представление выбора с вашими собственными пользовательскими подпредставлениями, которые могут быть представлениями изображения. Это даст вам реальный вид сборщика с вашими изображениями, который может или не может быть тем, к чему вы на самом деле стремитесь.