Как сделать меню с крутящимися по кругу иконками?

Я пытаюсь создать меню для своего приложения с несколькими значками по кругу. Пользователь должен иметь возможность вращать это меню, заставляя значки менять свое положение вокруг этой окружности, но не вращая себя. Я читал это ранее http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit, чтобы я мог видеть, как следить за движением пальца, но мне нужно, чтобы это меню имело инерционное вращение после касание заканчивается. У меня есть 2 вопроса о том, как это сделать.

Во-первых, как лучше всего сделать анимацию с движущимися по кругу иконками? Он должен замедляться до тех пор, пока не остановится, и, если пользователь двигает пальцем достаточно быстро, должен быть в состоянии сделать более одного полного круга.

Во-вторых, как измерить скорость движения пальца в конце? Я пытался использовать locationInView и previousLocationInView и просто вращать его по разнице углов между ними, умноженной на некоторую константу. Проблема в том, что когда я держу палец на одном месте какое-то время и поднимаю его, я все равно получаю инерционное движение круга, и в этом случае я вообще не хочу, чтобы он двигался.


person johnyu    schedule 23.04.2013    source источник


Ответы (1)


Вы хотите использовать вид прокрутки. В частности, вам нужен скрытый вид прокрутки, в котором вы прикрепляете распознаватель жестов панорамирования из вида прокрутки к своему пользовательскому виду меню. Затем вы реализуете методы делегата представления прокрутки, чтобы перерисовать свое меню. В этом видео WWDC есть хороший обзор процесса. Преимущество этот подход заключается в том, что вы получаете истинное ускорение и замедление в стиле iOS бесплатно. Вам не нужно беспокоиться о положении или скорости пальца, только о смещении содержимого прокрутки.

Если только вы не хотите крутить пальцем по кругу с пунктами меню. Это другая игра в мяч...

Теоретически тот же подход, что и выше, можно использовать для вращения пальца по кругу. Вам нужно будет убедиться, что directionalLockEnabled было установлено в NO в представлении прокрутки. Проблема в том, что вычисления для определения поворота вашего меню намного сложнее. Вероятно, вы хотели бы быть модальным и проверить, является ли вид прокрутки dragging в обратных вызовах. Если он перетаскивается, вы должны использовать прикосновения к жесту панорамирования, чтобы найти точное местоположение пальца для установки поворота. Вы также хотели бы сохранить данные о мгновенном направлении движения пальца, чтобы при отпускании касания... Если оно не перетаскивается, вы используете смещение содержимого прокрутки, чтобы применить эффект замедления к вращению (используя направление прокрутки непосредственно перед тем, как касание было отпущено, чтобы узнать, как использовать изменения смещения содержимого).

person Wain    schedule 23.04.2013
comment
Да, это именно то, что я хочу сделать. - person johnyu; 25.04.2013