Timed Gesture

一定の時間の間、ボタンを長押しすることによって、アクションを起動します。Lua プログラミングの知識が若干必要です。

下記のリンクらか、サンプルプロジェクトをダウンロードできます.

  • timedBtnはデフォルトのボタン画像です

  • timedOverは画像が載っているボタンです.灰色の長方形をしています

button and action

timed layerが5秒間押されたとき,アクションが発生します.以下の名前で,buttonとactionを作成してください.

  • act_timed
  • but_timed

action - act_timedの作成

例えば,actionにgotoPageやanimationsなど設定できます.サンプルプロジェクトではテキストを150%大きくする editImage を設定しています.

button - but_timedの作成

  • Default state : Layer timedBtn
  • Over staet : timedOver
  • Press

buttonの動作は、下記の外部コードを利用してください。 Click Code > External codes から Browseボタンでファイルを選択してください

  • timed_action.lua

timed_acction.lua

timedBtnが5秒間押されると,action_act_timed eventが発生します.もしアクションの名前を別のアクションに変更した場合,dispatchEvent parameterの名前を変更してください.action_{アクションの名前}にしてください

print(layer.timedBtn.type)

if layer.timedBtn.type == "press" then
    _K.timed = 0
    _K.timerStash.timedGestureTimer = timer.performWithDelay(1000, function ()
        if _K.timed == 5 or _K.message == "Released" then
            _K.message = "Released"
        else
            _K.timed = _K.timed + 1
            _K.message = _K.timed .."s"
        end
        print(_K.message)
        end, 6)
else -- release
    print("release", _K.message)
    if _K.message == "Released" then
        print("Fired")
        UI.scene:dispatchEvent({name="action_act_timed"})
    else
        _K.timed = 0
        _K.message = _K.timed .."s"
    end
    timer.cancel(_K.timerStash.timedGestureTimer)
    _K.timerStash.timedGestureTimer = nil
end

Edit button lua に onRelease = onTimeBtnEventRelase の追加

ボタンのコードは、以下のファイル内にパブリッシュされています。onRelease関数を追加して,newButton functionに設定してください.

  • build4/components/page01/timedBtn_button_but_timed.lua

onTimeBtnEventRelease関数を追加します. Layer.timeBtn.type は "release" です

            local function ontimedBtnEventRelease(self)
                if layer.timedBtn.enabled == nil or layer.timedBtn.enabled then
                    layer.timedBtn.type = "release"
                -- but_timed(layer.timedBtn)
                UI.scene:dispatchEvent({name="timedBtn_button_but_timed", layer=layer.timedBtn })
                end
            end

onRelease = ontimedBtnEventRelease は newButton function に追加します

            layer.timedBtn = widget.newButton {
                id          = "timedBtn",
                defaultFile = _K.imgDir..imagePath,
                overFile    = _K.imgDir.."p1/timedover.png",
                width       = imageWidth,
                height      = imageHeight,
                onPress     = ontimedBtnEvent,
                onRelease   = ontimedBtnEventRelease
            }
  • Before

      function _M:buttonLocal(UI)
      local sceneGroup = UI.scene.view
      local layer      = UI.layer
              local function ontimedBtnEvent(self)
                  if layer.timedBtn.enabled == nil or layer.timedBtn.enabled then
                      layer.timedBtn.type = "press"
                      UI.scene:dispatchEvent({name="timedBtn_button_but_timed", layer=layer.timedBtn })
                  end
              end
              layer.timedBtn = widget.newButton {
                  id          = "timedBtn",
                  defaultFile = _K.imgDir..imagePath,
                  overFile    = _K.imgDir.."p1/timedover.png",
                  width       = imageWidth,
                  height      = imageHeight,
                  onRelease   = ontimedBtnEvent
              }
              layer.timedBtn.x        = mX
              layer.timedBtn.y        = mY
              layer.timedBtn.oriX     = mX
              layer.timedBtn.oriY     = mY
              layer.timedBtn.oriXs    = layer.timedBtn.xScale
              layer.timedBtn.oriYs    = layer.timedBtn.yScale
              layer.timedBtn.alpha    = oriAlpha
              layer.timedBtn.oldAlpha = oriAlpha
              layer.timedBtn.name     = "timedBtn"
              sceneGroup.timedBtn     = layer.timedBtn
              sceneGroup:insert(layer.timedBtn)
      end
    
  • After

          function _M:buttonLocal(UI)
          local sceneGroup = UI.scene.view
          local layer      = UI.layer
              local function ontimedBtnEvent(self)
                  if layer.timedBtn.enabled == nil or layer.timedBtn.enabled then
                      layer.timedBtn.type = "press"
                      UI.scene:dispatchEvent({name="timedBtn_button_but_timed", layer=layer.timedBtn })
                  end
              end
              --
              local function ontimedBtnEventRelease(self)
                  if layer.timedBtn.enabled == nil or layer.timedBtn.enabled then
                      layer.timedBtn.type = "release"
                  -- but_timed(layer.timedBtn)
                  UI.scene:dispatchEvent({name="timedBtn_button_but_timed", layer=layer.timedBtn })
                  end
              end
              --
              layer.timedBtn = widget.newButton {
                  id          = "timedBtn",
                  defaultFile = _K.imgDir..imagePath,
                  overFile    = _K.imgDir.."p1/timedover.png",
                  width       = imageWidth,
                  height      = imageHeight,
                  onPress     = ontimedBtnEvent,
                  onRelease   = ontimedBtnEventRelease
              }
              layer.timedBtn.x        = mX
              layer.timedBtn.y        = mY
              layer.timedBtn.oriX     = mX
              layer.timedBtn.oriY     = mY
              layer.timedBtn.oriXs    = layer.timedBtn.xScale
              layer.timedBtn.oriYs    = layer.timedBtn.yScale
              layer.timedBtn.alpha    = oriAlpha
              layer.timedBtn.oldAlpha = oriAlpha
              layer.timedBtn.name     = "timedBtn"
              sceneGroup.timedBtn     = layer.timedBtn
              sceneGroup:insert(layer.timedBtn)
          end
    

custom fileとして作成

プロジェクトを再度パブリッシュすると,変更が上書きされてしまいます。これを避けるため、luaファイルをcustom folderにコピーして保存してください.

timedBtn_button_but_timed.lua をコピーして以下のディレクトリに保存

  • build4/custom/components/page01/timedBtn_button_but_timed.lua

参照 http://localhost:4000/tutorials/kwik/programming/tmplt_and_customization.html

results matching ""

    No results matching ""