0

スクロールリストがあるプロジェクトがあります。ユーザーがリストの項目を「ロングタッチ」して削除できるようにしたいと考えています。

私は Flash CS6 を使用して Air for iOS で開発しているので、iOS 展開に適した MultiTouch ジェスチャについてあまり知りません。

私の考えでは、私が行きたいアニメーションのステップはそうです..

  1. アイテム ムービークリップ内の btn_delete と呼ばれる非表示のボタンが、ロング タッチの開始 + タイマーの開始時に表示されます。
  2. 中間ステップ: btn_delete は TweenMax Rotate を使用して 90 度回転します (これについては説明済みです)。
  3. 最終ステップ: タイマーが終了すると、ダイアログ ボックス/確認ボックスがポップアップ表示され、アイテムを削除するかどうかをユーザーに尋ねます。

これまでの構造を理解していただくために、簡単に書いた一般的なコードを次に示します (相互リンクするリスナー関数は省略しています)。

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");
}

誰かが私の基準にほぼ一致するコードをすでに書いている場合は、投稿してください!

4

1 に答える 1

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 から始まります (reset() にはタイマーを停止するという追加の利点があります)。タイマーが完了すると、削除コードに加えて、マウスアップと同じことを行います。

ここで MouseEvent を使用しているのは、このインスタンスでは (ほとんどの場合) TouchEvent と同じように動作し、デスクトップで使用できるためです (つまり、エミュレーターでテストでき、必要に応じてこれを他のプロジェクトに追加できます)。 )

更新: 質問を読み直して、ローテーションを見逃したことに気付きました。このためには、別の完全なハンドラーを持つ別のタイマーを追加するだけで、その関数ではローテーションのみを行い、そのタイマーをリセットします。

于 2013-04-19T18:52:25.103 に答える