From 5664ad974b60fb4ebf5aaa78388b52a123a41951 Mon Sep 17 00:00:00 2001 From: Damiaan Dufaux Date: Sun, 18 Jun 2017 16:04:43 +0200 Subject: [PATCH] Show maximum of five fingers --- Magic Drumpad/Base.lproj/Main.storyboard | 67 ++++++++++++++++++++++-- Magic Drumpad/ViewController.swift | 54 ++++++++++++++++--- 2 files changed, 108 insertions(+), 13 deletions(-) diff --git a/Magic Drumpad/Base.lproj/Main.storyboard b/Magic Drumpad/Base.lproj/Main.storyboard index 5de8dc5..7c96f70 100644 --- a/Magic Drumpad/Base.lproj/Main.storyboard +++ b/Magic Drumpad/Base.lproj/Main.storyboard @@ -1,7 +1,10 @@ - - + + - + + + + @@ -673,7 +676,7 @@ - + @@ -700,11 +703,65 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Magic Drumpad/ViewController.swift b/Magic Drumpad/ViewController.swift index 064a814..1d7db2f 100644 --- a/Magic Drumpad/ViewController.swift +++ b/Magic Drumpad/ViewController.swift @@ -9,19 +9,57 @@ import Cocoa class ViewController: NSViewController { - + @IBOutlet weak var fingerView1: NSBox! + @IBOutlet weak var fingerView2: NSBox! + @IBOutlet weak var fingerView3: NSBox! + @IBOutlet weak var fingerView4: NSBox! + @IBOutlet weak var fingerView5: NSBox! + var fingerViews: Set! + var visibleFingers = [Int: NSBox]() + override func viewDidLoad() { super.viewDidLoad() - + fingerViews = [fingerView1, fingerView2, fingerView3, fingerView4, fingerView5] + + view.acceptsTouchEvents = true + view.pressureConfiguration = NSPressureConfiguration(pressureBehavior: .primaryClick) // Do any additional setup after loading the view. } - - override var representedObject: Any? { - didSet { - // Update the view, if already loaded. + + override func pressureChange(with event: NSEvent) { + let size = CGFloat(event.pressure) * 20 + 25 + for fingerView in fingerViews { + fingerView.frame.size.width = size + fingerView.frame.size.height = size + fingerView.cornerRadius = size/2 + } + } + + override func touchesBegan(with event: NSEvent) { + for touch in event.touches(matching: .began, in: nil) { + if let fingerView = fingerViews.subtracting(visibleFingers.values).first { + visibleFingers[touch.identity.hash] = fingerView + fingerView.isTransparent = false + + fingerView.frame.origin.x = (view.frame.width - fingerView.frame.width) * touch.normalizedPosition.x + fingerView.frame.origin.y = (view.frame.height - fingerView.frame.height) * touch.normalizedPosition.y + } + } + } + + override func touchesMoved(with event: NSEvent) { + for touch in event.touches(matching: .moved, in: nil) { + if let fingerView = visibleFingers[touch.identity.hash] { + fingerView.frame.origin.x = (view.frame.width - fingerView.frame.width) * touch.normalizedPosition.x + fingerView.frame.origin.y = (view.frame.height - fingerView.frame.height) * touch.normalizedPosition.y + } + } + } + + override func touchesEnded(with event: NSEvent) { + for touch in event.touches(matching: [.ended, .cancelled], in: nil) { + visibleFingers.removeValue(forKey: touch.identity.hash)?.isTransparent = true } } - - }