LoginSignup
10
11

More than 5 years have passed since last update.

Force Touchトラックパッドの「強めのクリック」を処理する

Posted at

Force Touchトラックパッドでは「強めのクリック」という操作がサポートされていて、たとえばSafariでリンクを強めにクリックするとリンク先のプレビューがポップオーバーされます。ここでは、NSButtonを強めのクリックに対応させる方法を紹介します。

強めのクリックに対応したボタンを作成

まず、NSButtonはデフォルトの状態では強めのクリックを利用できないため、下記のようにbutton typeをMultiLevelAcceleratorButtonへ変更して強めのクリックを利用できるよう設定します。

button.setButtonType(.MultiLevelAcceleratorButton)
button.maxAcceleratorLevel = 5

ここでは一緒にmaxAcceleratorLevel5に設定しましたが、これはクリックの強さを5段階(1:通常〜5:最強)で受け付けるということです。MultiLevelAcceleratorButtonの場合のデフォルト値は2で、それ以外のbutton typeの場合は1がデフォルトです。1の場合は強いクリックを受け付けません。

クリック時に強さのレベルを取得する

強いクリックは、通常のクリックと同じようにtargetに対してactionを実行します。このとき、クリック中に強さレベルが変わる(通常クリック中に強く押し込むなど)と、その都度actionが実行されます。

action中でクリックの強さを取得するには、NSButtonintegerValueプロパティを参照します。通常のクリックが行われた場合にはこの値は1に、強いクリックが行われた場合にはこの値が2以上になります。最大値はmaxAcceleratorLevelに設定した値になります。

なお、Force Touchに対応していないトラックパッドからのクリックはすべてintegerValue1になります。

デモ

下記のように、5段階のクリックを受け付けて、そのクリックレベルをNSLevelIndicatorへ表示させるサンプルを作成して実行してみました。

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var button: NSButton!
    @IBOutlet var indicator: NSLevelIndicator!

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        button.setButtonType(.MultiLevelAcceleratorButton)
        button.maxAcceleratorLevel = 5
    }

    @IBAction func click(sender: AnyObject?) {
        indicator.integerValue = button.integerValue
    }
}

デモ

デモアニメではなかなか伝わりにくいですが、ボタンを長押しする間に押し込みを強めたり弱めたりしています。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11