TłoJak dostać dotyk współrzędne ze zdarzenia valueChanged w Swift
Mam previously learned jak korzystać z funkcji Rozpoznawanie gestów lub continueTrackingWithTouch
uzyskać ciągłe aktualizacje bieżącej lokalizacji dotykowym i następnie wykorzystać te uwagi coś takiego:
teraz jednak chciałbym, aby dowiedzieć się, jak zrobić to samo przy użyciu celów. Mogę już dotknąć i dotknąć zdarzeń za pomocą TouchDown
i TouchUpInside
, ale nie wiem, jak uzyskać ciągłe aktualizacje. Zakładałem, że będzie to wydarzenie ValueChanged
, ale do tej pory nie działa.
To co próbowałem:
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myCustomControl: MyCustomControl!
@IBOutlet weak var trackingBeganLabel: UILabel!
@IBOutlet weak var trackingEndedLabel: UILabel!
@IBOutlet weak var xLabel: UILabel!
@IBOutlet weak var yLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// these work
myCustomControl.addTarget(self, action: "myTouchDown", forControlEvents: UIControlEvents.TouchDown)
myCustomControl.addTarget(self, action: "myTouchUpInside", forControlEvents: UIControlEvents.TouchUpInside)
// this doesn't work
myCustomControl.addTarget(self, action: "myValueChangedEvent:",
forControlEvents: UIControlEvents.ValueChanged)
}
// this works
func myTouchDown() {
trackingBeganLabel.text = "Touched down"
}
// this works
func myTouchUpInside() {
trackingEndedLabel.text = "Touch up inside"
}
// this doesn't work, function never gets called
func myValueChangedEvent(sender: UIControl) {
let location = sender.convertPoint(CGPointZero, toView: myCustomControl)
xLabel.text = "x: \(location.x)"
yLabel.text = "y: \(location.y)"
}
}
MyCustomControl.swift
import UIKit
class MyCustomControl: UIControl {
// currently empty. Do I need to add something here?
}
Uwagi
- Zmieniono kod po uzyskaniu odpowiedzi @ CaseyWagner. Kompilator nie generuje już błędu, ale
UIControlEvents.ValueChanged
nigdy nie zostanie zwolniony. - To jest moja próba uzyskania kompletnej odpowiedzi na temat metody Metoda 1: Dodawanie docelowej sekcji this answer.
Świetnie! Brakowało mi wydarzenia "TouchDragInside". Użyłem 'if let touch = ...' ponieważ nie jestem pewien, czy wymuszone rozpakowanie kiedykolwiek spowodowałoby awarię. – Suragch