Mac 터치패드 원시 데이터 가져오기
프로젝트 준비
Embedded Binaries
에 Copy items if needed 로 추가한다 (동시에 Linked Frameworks and Libraries
에 추가된다) M5MultitouchSupport
TARGETS -> Capabilities -> App SandBox를
OFF
로 설정~.entitlements
에 Key com.apple.security.temporary-exception.sbpl
를 추가하고 Value 에 (allow iokit-open)
를 기입한다 코딩(최소한)
ViewController.swiftimport Cocoa
import M5MultitouchSupport
class ViewController: NSViewController {
var manager: M5MultitouchManager! = nil
var listener: M5MultitouchListener! = nil
override func viewDidLoad() {
super.viewDidLoad()
manager = M5MultitouchManager.shared()
listener = manager.addListener(callback: { [weak self] (event) in
if let e = event, let touches = e.touches as NSArray as? [M5MultitouchTouch] {
DispatchQueue.main.async {
self?.process(touches)
}
}
})
}
override func viewWillDisappear() {
super.viewWillDisappear()
listener.listening = false
}
override var representedObject: Any? {
didSet {
}
}
func process(_ touches: [M5MultitouchTouch]) {
var currentInfo: String = "["
currentInfo += touches.map({ (touch) -> String in
return String(format: "ID: %d, state: %@, Position(x, y) = (%0.4f, %0.4f), Velocity(x, y) = (%+0.4f, %+0.4f), Size: %0.4f, Axis(major, minor) = (%0.4f, %0.4f), Angle: %0.4f",
touch.identifier,
stateString(touch.state),
touch.posX,
touch.posY,
touch.velX,
touch.velY,
touch.size,
touch.majorAxis,
touch.minorAxis,
touch.angle)
}).joined(separator: "\n ")
currentInfo += "]"
Swift.print(currentInfo)
}
func stateString(_ state: M5MultitouchTouchState) -> String {
switch state {
case .notTouching: return "notTouching"
case .starting: return "starting"
case .hovering: return "hovering"
case .making: return "making"
case .touching: return "touching"
case .breaking: return "breaking"
case .lingering: return "lingering"
case .leaving: return "leaving"
default: return "unknown"
}
}
}
취득 가능한 데이터
11점까지 터치점 획득 가능
또한 각 터치 포인트에 대해,
- ID
- 접촉 상태
- 절대 좌표(범위는 터치패드 영역의 상하·좌우 각각에 대해 0~1)
- 이동 속도
- 긴 직경과 짧은 직경 (터치 포인트를 타원으로 간주)
- 장축 기울기
취득 가능
샘플 프로젝트(GitHub)
TouchpadRawDataGetter
Reference
이 문제에 관하여(Mac 터치패드 원시 데이터 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Kyome/items/0365bddcff1a36ae0daf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import Cocoa
import M5MultitouchSupport
class ViewController: NSViewController {
var manager: M5MultitouchManager! = nil
var listener: M5MultitouchListener! = nil
override func viewDidLoad() {
super.viewDidLoad()
manager = M5MultitouchManager.shared()
listener = manager.addListener(callback: { [weak self] (event) in
if let e = event, let touches = e.touches as NSArray as? [M5MultitouchTouch] {
DispatchQueue.main.async {
self?.process(touches)
}
}
})
}
override func viewWillDisappear() {
super.viewWillDisappear()
listener.listening = false
}
override var representedObject: Any? {
didSet {
}
}
func process(_ touches: [M5MultitouchTouch]) {
var currentInfo: String = "["
currentInfo += touches.map({ (touch) -> String in
return String(format: "ID: %d, state: %@, Position(x, y) = (%0.4f, %0.4f), Velocity(x, y) = (%+0.4f, %+0.4f), Size: %0.4f, Axis(major, minor) = (%0.4f, %0.4f), Angle: %0.4f",
touch.identifier,
stateString(touch.state),
touch.posX,
touch.posY,
touch.velX,
touch.velY,
touch.size,
touch.majorAxis,
touch.minorAxis,
touch.angle)
}).joined(separator: "\n ")
currentInfo += "]"
Swift.print(currentInfo)
}
func stateString(_ state: M5MultitouchTouchState) -> String {
switch state {
case .notTouching: return "notTouching"
case .starting: return "starting"
case .hovering: return "hovering"
case .making: return "making"
case .touching: return "touching"
case .breaking: return "breaking"
case .lingering: return "lingering"
case .leaving: return "leaving"
default: return "unknown"
}
}
}
TouchpadRawDataGetter
Reference
이 문제에 관하여(Mac 터치패드 원시 데이터 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kyome/items/0365bddcff1a36ae0daf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)