teclados teclado swiftkey predeterminado para pantalla over lector desde configurar como activar accesibilidad ios swift long-press

ios - swiftkey - teclado predeterminado iphone



Swift: Reconocimiento de gestos de pulsación larga-Detección de toques y pulsación prolongada (3)

Quiero conectar una acción de tal manera que si el gesto es un toque, anima un objeto de una manera particular, pero si la duración de la prensa fue más de .5 segundos, hace algo más.

En este momento, solo tengo la animación conectada. ¿No sé cómo puedo diferenciar entre una pulsación larga y un toque? ¿Cómo accedo a la duración de la prensa para lograr lo anterior?

@IBAction func tapOrHold(sender: AnyObject) { UIView.animateKeyframesWithDuration(duration, delay: delay, options: options, animations: { UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations: { self.polyRotate.transform = CGAffineTransformMakeRotation(1/3 * CGFloat(M_PI * 2)) }) UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations: { self.polyRotate.transform = CGAffineTransformMakeRotation(2/3 * CGFloat(M_PI * 2)) }) UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations: { self.polyRotate.transform = CGAffineTransformMakeRotation(3/3 * CGFloat(M_PI * 2)) }) }, completion: { (Bool) in let vc : AnyObject! = self.storyboard?.instantiateViewControllerWithIdentifier("NextView") self.showViewController(vc as UIViewController, sender: vc) })


Defina dos IBActions y configure un Gesture Recognizer para cada una de ellas. De esta manera puedes realizar dos acciones diferentes para cada gesto.

Puede configurar cada Gesture Recognizer en diferentes IBActions en el generador de interfaces.

@IBAction func tapped(sender: UITapGestureRecognizer) { println("tapped") //Your animation code. } @IBAction func longPressed(sender: UILongPressGestureRecognizer) { println("longpressed") //Different code }

A través de código sin constructor de interfaces

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapped:") self.view.addGestureRecognizer(tapGestureRecognizer) let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:") self.view.addGestureRecognizer(longPressRecognizer) func tapped(sender: UITapGestureRecognizer) { println("tapped") } func longPressed(sender: UILongPressGestureRecognizer) { println("longpressed") }


A través de código sin constructor de interfaces

// Global variables declaration var longPressed = false var selectedRow = 0 override func viewDidLoad() { super.viewDidLoad() let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(ContactListTableViewController.handleLongPress(_:))) longPressGesture.minimumPressDuration = 1.0 // 1 second press longPressGesture.allowableMovement = 15 // 15 points longPressGesture.delegate = self self.tableView.addGestureRecognizer(longPressGesture) } // Long tap work goes here !! if (longPressed == true) { if(tableView.cellForRowAtIndexPath(indexPath)?.accessoryType == .Checkmark){ tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .None self.selectedRow -= 1 if(self.selectedRow == 0){ self.longPressed = false } } else { self.selectedRow += 1 tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .Checkmark } } else if(self.selectedRow == 0) { // Single tape work goes here !! }

Pero el único problema es que el gesto de pulsación larga se ejecuta dos veces. Si has encontrado alguna solución haz un comentario abajo!


Para swift2

let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress)) lpgr.minimumPressDuration = 0.5 lpgr.delaysTouchesBegan = true lpgr.delegate = self self.featuredCouponColView.addGestureRecognizer(lpgr)

Acción

//MARK: - UILongPressGestureRecognizer Action - func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) { if gestureReconizer.state != UIGestureRecognizerState.Ended { //When lognpress is start or running } else { //When lognpress is finish } }