Я хотел бы создать циферблат с аналогичным поведением в некоторых приложениях с ретро-телефоном. У них есть круговой дозвонщик, который позволяет вам вращать его пальцем. Любые идеи, как это создается, или некоторые ссылки, которые обсуждают его аспекты?Любые примеры создания циферблата?
ответ
Создайте свой круглый диск с номерами на нем. Создайте свою подвижную часть диска как прозрачное изображение, центрированное по цифровому циферблату, чтобы вы могли видеть цифры через прозрачные отверстия. Нанесите небольшое изображение для остановки пальца на обоих. Когда вы получаете прикосновение в одной из областей отверстия, отслеживайте движение пальца. Когда палец перемещается, поверните прозрачное изображение циферблата, чтобы следовать ему, используя матрицу преобразования. Если палец движется неправильным способом или когда палец поднимается или перемещается за пределы вращающегося диска, циферблат «высвобождается», и вы отменяете вращение с использованием подходящей скорости для имитации возврата с пружинным возвратом.
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:d];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationBeginsFromCurrentState:YES];
CGAffineTransform transform = CGAffineTransformMakeRotation(/* some angle */);
image.transform = transform;
[UIView commitAnimations];
Определение фактического набранного номера может быть сделано несколькими способами, начиная от создания невидимых кнопок на циферблате и захвата событий от тех или путем расчета угла поворота, необходимого для возврата вращающийся диск домой. Я не думаю, что реализовать это было бы очень сложно, это было бы трудно.
Спасибо тонну! Как вы заставляете его следить за скоростью пользователя, а не с определенной скоростью через setAnimationDuration :? – 4thSpace
Вы можете легко получить координаты касания. Если вы думаете о механическом телефонном циферблате, вы можете повернуть его практически на любую скорость, какую вам нравится, если вы достаточно сильно нажмете. Таким образом, в то время как изменения касаются, периодически (таймер? Каждое n-ое уведомление о касании?) Выработать угол между ранее выбранной точкой, новой точкой и центральной точкой поворота и сделать довольно быстрое вращение (как указано выше), чтобы следить за пальцем. Я хотел бы иметь возможность перемещать его по часовой стрелке практически на любую скорость, но для того, чтобы он всегда возвращался в направлении против часовой стрелки при механической скорости пружины. –