Событие Long Touch с таймером и блоком подтверждения для развертывания iOS в AS3
У меня есть проект, где у меня есть список прокрутки. Я хотел бы, чтобы мой пользователь мог "долго касаться" элемента в списке, чтобы они могли его удалить.
Я занимаюсь разработкой в Air для iOS с использованием Flash CS6, поэтому я не очень много знаю о подходящих жестах MultiTouch для развертывания iOS.
На мой взгляд, шаги анимации я хотел бы пойти так...
- Ранее невидимая кнопка с именем btn_delete внутри мувиклипа Item появится, когда Long Touch запускается + начинается таймер
- Промежуточный шаг: btn_delete повернется на 90 градусов, используя TweenMax Rotate (я это рассмотрел)
- Последний шаг: когда таймер достигнет своего завершения, появится диалоговое окно / окно подтверждения и спросит пользователя, уверены ли они, хотят ли они удалить элемент.
Итак, вот некоторый общий код, который я написал быстро, чтобы дать вам представление о моей структуре (я опустил взаимосвязанные функции слушателя):
function exampleFunction {
_item.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
}
//-- Long Press Listener Functions--//
function onTouchBegin(eBegin:TouchEvent) {
trace("start");
}
function onTouchRotate(eEnd:TouchEvent) {
trace("rotation of image");
}
function onTouchEnd(eEnd:TouchEvent) {
trace("end");
}
Если у кого-то есть фрагмент кода, который он уже написал, который примерно соответствует моим критериям, пожалуйста, опубликуйте его!
1 ответ
Я бы просто использовал MouseEvent
за это.
var timer:Timer = new Timer( 500 ); //ms
timer.addEventListener( TimerEvent.TIMER_COMPLETE, timerCompleteHandler );
listItem.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
function mouseDownHandler( e:MouseEvent ):void {
timer.start();
stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}
function mouseUpHandler( e:MouseEvent ):void {
//just some clean up to reset the timer and remove the mouse up event listener from the stage
timer.reset();
stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}
function timerCompleteHandler( e:TimerEvent ):void {
timer.reset();
stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
//do delete actions here
}
Поэтому, нажимая кнопку мыши, вы запускаете таймер и слушаете событие повышения уровня мыши (на сцене, а не на компоненте. Это важно. Если вы хотите узнать почему, попробуйте его на компоненте и поэкспериментируйте). При наведении курсора вверх вы сбрасываете таймер, поэтому при следующем нажатии мыши он начинается с 0 (сброс () имеет дополнительное преимущество - остановка таймера). По завершении таймера вы делаете то же самое, что и при наведении мыши, в дополнение к своему коду удаления.
Я использую MouseEvent здесь только потому, что он ведет себя идентично TouchEvent (по большей части) в этом случае, и его можно использовать на рабочем столе (это означает, что вы можете протестировать в эмуляторе и добавить его в другие проекты, если хотите))
ОБНОВЛЕНИЕ: Просто перечитал ваш вопрос и понял, что я пропустил поворот. Для этого просто добавьте еще один таймер с отдельным завершенным обработчиком, который и в этой функции ТОЛЬКО выполняет вращение и сбрасывает этот таймер.