Как правильно определить, тянет ли пользователь мой ползунок круга по часовой стрелке или против часовой стрелки, используя время? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть пользовательский вид, который имеет форму часов. У меня есть изображение слайдера, которое пользователь может использовать для перемещения по часовой стрелке против часовой стрелки (против часовой стрелки) или по часовой стрелке (по часовой стрелке), чтобы они могли выбрать время Мой пользовательский вид возвращает мне time типа данных String в формате H:mm aa. например: 1:34 AM.

В настоящее время я могу определить обнаружение CW или CCW, но это не полное доказательство, поскольку существует проблема, когда пользователи скользят мимо точки 12:00 AM.

Моя текущая логика для определения движения CW или CCW:

  1. Преобразование time в военное время, чтобы я мог сохранить его как Date объект, известный как mDate.
  2. Проверьте, меньше ли последний timeToMil, чем текущий mDate.getTime(). Если оно меньше, я предполагаю, что это CW, иначе это CCW.
  3. Сохранить текущее количество миллисекунд с 1 января 1970 года в переменной timeToMil, чтобы на следующей итерации можно было определить, была ли последняя точка перемещена во времени или назад.

Проблема, однако, заключается в том, что последний раз пользователи, например, в 23:00 и перемещают ползунок в 1:00. Если использовать логику №2, это определит, что это CCW, что неверно.

if (timeToMil < mDate.getTime()) {
    cw = true; 
} else {
    cw = false;
}

Мне было интересно, есть ли лучший подход, чем этот? Я слишком долго смотрю на это, и больше не думаю, что это продуктивно, и это помогло бы увидеть некоторые внешние перспективы.

Я думал о том, чтобы преобразовать все минуты в какие-то радианы, но я не уверен, стоит ли идти этим усилием.

EDIT: Добавление фото:

enter image description here

Серый круг - это изображение, которое пользователь может перетащить вдоль красной линии по часовой стрелке или против часовой стрелки. Сдвиньте влево - CCW, сдвиньте его вправо - CW

1 Ответ

0 голосов
/ 07 мая 2019

ч - часы [1,12] м - минуты [0,59]

720 = 12 * 60 - минуты для полного круга часовой стрелки

halfOfCircle = 360 = 720/2 - минуты для полукруга часовой стрелки

timePrev = timeNext
timeNext = (h%12)*60+m

if (abs(timePrev-timeNext)<halfOfCircle){
    if (timePrev<timeNext){
        return "CW"
    } else {
        return "CCW"
    }
} else {
    if (timeNext<halfOfCircle){
        return "CW"
    } else {
        return "CCW"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...