Drücken und halten Sie die Taste für repeat "Feuer"
Ich genannt habe unzählige andere Fragen über ein drücken-und-halten-Taste, aber es gibt nicht viele Verwandte zu Swift. Ich habe eine Funktion verbunden, um eine Schaltfläche mit der touchUpInside Veranstaltung:
@IBAction func singleFire(sender: AnyObject){
//code
}
...und eine andere Funktion ist dazu gedacht, um die Funktion aufzurufen, die oben wiederholt, während die gleiche Taste gedrückt wird, und Stoppt, wenn die Taste nicht mehr gedrückt ist:
@IBAction func speedFire(sender: AnyObject){
button.addTarget(self, action: "buttonDown:", forControlEvents: .TouchDown)
button.addTarget(self, action: "buttonUp:", forControlEvents: .TouchUpOutside)
func buttonDown(sender: AnyObject){
timer = NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: "singleFire", userInfo: nil, repeats: true)
}
func buttonUp(sender: AnyObject){
timer.invalidate()
}
}
Ich bin mir nicht sicher, was ich falsch mache, und ich weiß nicht, wie Sie setup touch-events auf die gleiche Taste für verschiedene Funktionen.
InformationsquelleAutor der Frage Tim | 2015-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst schnellen wiederholen Sie feuern, wenn Ihre Schaltfläche gedrückt ist.
Ihre
buttonDown
undbuttonUp
Methoden definiert werden müssen, auf der obersten Ebene, und nicht innerhalb einer anderen Funktion. Für Demo-Zwecke, es ist klarer zu verzichten Verkabelung@IBAction
s aus dem Storyboard, und setzen Sie einfach die Schaltfläche inviewDidLoad
:Auch, ich änderte
.touchUpOutside
zu[.touchUpInside, .touchUpOutside]
(fangen beide touch-up-Ereignisse), und rufen SiesingleFire
auf den erstenbuttonDown
für einzelne Feuer. Mit diesen änderungen, drücken Sie die Taste feuert sofort, und dann feuert jeder0.3
Sekunden, solange der Knopf gedrückt wird.Den button können angeschlossen werden, bis in das Storyboard, anstatt es in
viewDidLoad
. In diesem Fall fügen Sie@IBAction
zubuttonDown
undbuttonUp
. Dann Einstellungen-klicken Sie auf Ihre Schaltfläche in das Storyboard, und ziehen Sie den Kreis neben Touch Down zufunc buttonDown
und ziehen aus den Kreisen neben Touch-Up-Inside und Touch-Up Außerhalb zufunc buttonUp
.InformationsquelleAutor der Antwort vacawama
In meiner ursprünglichen Antwort, die ich beantwortet die Frage, wie eine Schaltfläche erkennen beide ein Tippen und lange drücken. In die geklärte Frage, es scheint, Sie wollen diese Schaltfläche, um ständig "Feuer" wie lange hält der Benutzer den finger nach unten. Wenn das der Fall ist, nur eine gestik-Erkennung benötigt wird.
Beispielsweise im Interface Builder ziehen Sie eine lange drücken Sie die gesture recognizer aus der Objektbibliothek auf die Schaltfläche und legen Sie dann die "Min " Dauer" zu null:
Dann können Sie Einstellungen-ziehen Sie die Taste lange drücken, gestik-Erkennung, um Ihren code in der assistant-editor, und fügen Sie ein
@IBAction
zu handhaben, lange drücken:Oder, wenn Sie wollen auch, aufzuhören zu Schießen, wenn der Benutzer den finger von der Taste, fügen Sie einen Scheck für die Lage der Geste:
Meiner ursprünglichen Antwort, die Beantwortung der anderen Frage, wie erkennt man beide Hähne und lange drückt auf einen button, der ist unten:
Persönlich würde ich verwenden, Tippen und lange drücken Geste Merkmale, z.B.:
Wenn Sie wollen, mit der long press Geste, die Sie durchführen könnte Ihre Aktion auf
.Ended
auch. Es kommt nur auf die gewünschte UX.FYI, können Sie auch fügen Sie diese zwei gesture recognizers rechts im Interface Builder auch (ziehen Sie einfach die entsprechenden gesten aus der Objektbibliothek auf die Schaltfläche und dann auf Einstellungen-ziehen Sie von der gestik-Erkennung zu
@IBAction
Funktionen), aber es war einfacher zu erklären, was Los ist, indem Sie zeigen, dass Sie es programmatisch.InformationsquelleAutor der Antwort Rob
Ich aktualisiert, @vacawama Beispiel-codes swift 3. Danke.
InformationsquelleAutor der Antwort fozoglu