У меня есть пользовательский 3D -зритель объектов на iOS, который позволяет пользователям вращать модель, используя сенсорный экран или трекпад и поддерживает Coasting (Spinning Momentum). Мне нужно остановить анимацию в прибрежном борьбе, как только пользователь прикоснится, но я могу немедленно обнаружить штрихи на самом экране - на трекпаде я не могу получить немедленное уведомление о прикосновениях. Это только стреляет только после небольшого движения на сенсорном экране и трекпаде. Это состояние никогда не происходит во время цикла жестов. Это не заставило Touchesbegan Fire для косвенных штрихов. Кто -нибудь знает, как поймать начальный контакт с трекпадом - до какого -либо движения - на косвенном устройстве ввода? На сенсорном экране вы увидите сообщение в тот момент, когда вы касаетесь представления, но трекпад не запускает какие -либо сообщения, пока ваши пальцы не перемещаются. Любой совет был бы очень признательен. < /P>
import UIKit
class ViewController: UIViewController {
private let debugView = DebugView()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
// Fill the screen with our debug view
debugView.frame = view.bounds
debugView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
debugView.backgroundColor = UIColor(white: 0.95, alpha: 1)
view.addSubview(debugView)
// Attach a pan recognizer that logs its state
let panGR = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
panGR.allowedScrollTypesMask = .all
debugView.addGestureRecognizer(panGR)
}
@objc private func handlePan(_ gr: UIPanGestureRecognizer) {
switch gr.state {
case .possible:
print("Pan state: possible")
case .began:
print("Pan state: began")
case .changed:
print("Pan state: changed – translation = \(gr.translation(in: debugView))")
case .ended:
print("Pan state: ended – velocity = \(gr.velocity(in: debugView))")
case .cancelled:
print("Pan state: cancelled")
case .failed:
print("Pan state: failed")
@unknown default:
print("Pan state: unknown")
}
}
}
class DebugView: UIView {
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
for t in touches {
let typeDesc: String
switch t.type {
case .direct: typeDesc = "direct (finger)"
case .indirectPointer: typeDesc = "indirectPointer (trackpad/mouse)"
case .indirect: typeDesc = "indirect (Apple TV remote)"
case .pencil: typeDesc = "pencil (Apple Pencil)"
@unknown default: typeDesc = "unknown"
}
print("touchesBegan on DebugView – touch type: \(typeDesc), location: \(t.location(in: self))")
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... y-stop-coa
Как обнаружить переходную передачу iPad Trackpad (непрямой позиции), чтобы немедленно прекратить анимацию в прибрежении ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение