Swift

Swift:swipe代替を実装

NSPressRecognizerで実装しようとしたのですが、左右・上下の実装が必要だったのでNSPanGestureRecognizerで実装しました。

NSPanGestureRecognizerの実装でひとつ修正点があります。

  • selectorは、func ExecPan(event: NSEvent) {のようにNSEventで受けるようにしていました。
    参考: wSpanGesture.action = #selector(self.ExecPan(_:))
  • しかし、これはfunc ExecPan(recognizer: NSPanGestureRecognizer) {のようにNSPanGestureRecognizerで受けた方がいいです。

下記#selectorの処理概要は、pan開始時に起点をクリアし、変更時にxy方向を追跡し、最終的に起点に対してxyのどの方向に動いたか判断して、それぞれ上(+y)下(-y)左(-x)右(+x)の処理をしています。

func ExecPan(recognizer: NSPanGestureRecognizer) {
switch recognizer.state {
case .Began:
A.newPoint      = CGPoint()
case .Changed:  
feedbackFilter.updateWithPanRecognizer(recognizer)
let translation = recognizer.translationInView(xWebView!)
let newX        = A.newPoint.x + translation.x
let newY        = A.newPoint.y + translation.y
A.newPoint      = CGPoint(x: newX, y: newY)
case .Ended, .Cancelled:
if abs(A.newPoint.x) > abs(A.newPoint.y) {
if A.newPoint.x > 0     { ExecIBActionForward(self)     }
else                    { ExecIBActionBackward(self)    }
} else {
if A.newPoint.y > 0     { ExecIBActionEnd(self)         }
else                    { ExecIBActionStart(self)       }
}
default: () 

}

 

Categories: Swift, 技術

Tagged as: