はじめに
PowerAppsでダブルタップしたかったので調べたのですが、なさそうなのでつくりました。
やり方
全体の配置
役割 | コントロール | コントロール名 | 既定から変更する 固定プロパティ |
---|---|---|---|
ダブルタップ間隔判定 | タイマー | TmrDT | Visible=false |
状態リセット | ボタン | BtnReset | Visible=false |
タップするボタン | ボタン | BtnTap | |
ダブルタップ後に出すボタン | ボタン | BtnDTclose |
スクリーン
DoubleTapCheck.OnVisible
Select(BtnReset);
UpdateContext({FlgPrint:false})
タイマー(TmrDT)
非表示にしてどこかに置いておきます。
繰り返し、自動開始はデフォルトのまま false
にしておきます。
ダブルタップの間隔はDurationで調整します(今回は300msec)
TmrDT.OnTimerStart
UpdateContext({FlgDblTap:true})
TmrDT.OnTimerEnd
Select(BtnReset);
UpdateContext({FlgPrint:false})
TmrDT.Start
FlgStartTimer
TmrDT.Duration
300
リセットボタン(BtnReset)
非表示にしてどこかに置いておきます。
BtnReset.OnSelect
UpdateContext({FlgDblTap:false,FlgStartTimer:false});
Reset(TmrDT)
ダブルタップするボタン(BtnTap)
BtnTAP.OnSelect
UpdateContext({FlgStartTimer: true});
If(FlgDblTap ,Select(BtnReset);UpdateContext({FlgPrint:true}) )
ダブルタップ成功時に表示させるボタン(BtnDTclose)
BtnDTclose.OnSelect
Select(BtnReset);
UpdateContext({FlgPrint:false})
BtnDTclose.Visible
FlgPrint
考え方
- 画面読み込み時に、初期動作でタイマーをリセットする
- BtnTapでタイマーを開始させる。と同時に、タイマー開始時の動作によりタップフラグをたてる(1回タップした、ということ)
- BtnTapが再度タップされると、タップフラグを確認し、すでにフラグが立っていたらタイマーをリセットし、ダブルタップ成功のボタンを表示させる
- もしタイマーが満了した場合は、タイマーがリセットされ、各フラグを折る(→2のイベントが発生したら、そこから処理再開)
でも、2のBtnTapのOnClickでタイマーを動作させたあとに、すぐタップフラグのチェックをするから、初回のタップでFlgDblTapがtrueになっちゃうと思うのですが、そうではないみたいなんですよね。一つのアクションに複数の関数を実行させる際の ;
の動作って、シーケンシャルじゃなくてパラで走っちゃうんでしょうかね??
検証ではまっさらなアプリで試してみたので、たぶん変な変数が残存してて、みたいなことはないと思うのですが。。。