2016-09-29 4 views
18

Im пытается получить UISwipeGestureRecognizer для работы в Swift 3, правильное прокручивание по умолчанию работает правильно, но не вверх или вниз.Проведите по экрану в Swift 3

Я попытался его контролем перетаскиванием Action

@IBAction func hole(_ recognizer: UISwipeGestureRecognizer) { 
    if (recognizer.direction == UISwipeGestureRecognizerDirection.left) 
    { 
     print("left") 
    }else if recognizer.direction == .right { 
     print("right") 
    }else { 
     print("other") 
    } 
} 

И в ViewDidLoad

//gesture recognisers 
let swipeRight = UISwipeGestureRecognizer(target: self, action: "holeSwiped:") 
swipeRight.direction = UISwipeGestureRecognizerDirection.right 
self.view.addGestureRecognizer(swipeRight) 

let swipeLeft = UISwipeGestureRecognizer(target: self, action: "holeSwiped:") 
swipeLeft.direction = UISwipeGestureRecognizerDirection.left 
self.view.addGestureRecognizer(swipeLeft) 

моему методу

func holeSwiped(gesture: UISwipeGestureRecognizer) 
{ 
    if let swipeGesture = gesture as? UISwipeGestureRecognizer{ 
     switch swipeGesture.direction { 
     case UISwipeGestureRecognizerDirection.right: 
      print("right swipe") 
     case UISwipeGestureRecognizerDirection.left: 
      print("left swipe") 
     default: 
      print("other swipe") 
     } 
    } 
} 

Теперь ни один из мазков не работают, за исключением по умолчанию. Есть идеи?

ответ

14

У меня была такая же проблема. На самом деле, любой салфетки просто разбил мой код (от Роба Персиваля, не так ли?). Поэтому я загрузил его готовый код, открыл его в XCode 8 и разрешил преобразовать в Swift 3. Два пункта были изменены.

In ViewDidLoad: 
    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped(_:))) 

И внутри функции:

func swiped(_ gesture: UIGestureRecognizer) 
0
func holeSwiped(gesture: UISwipeGestureRecognizer) 
    { 
    if let swipeGesture = gesture as? UISwipeGestureRecognizer{ 
    switch swipeGesture.direction { 
    case UISwipeGestureRecognizerDirection.right: 
     NSLog("right swipe") 
    case UISwipeGestureRecognizerDirection.left: 
     NSLog("left swipe") 
    default: 
     NSLog("other swipe") 
    } 
    } 
    } 
3

В Свифт 3 вы можете попробовать это.

let swipeRightOrange = UISwipeGestureRecognizer(target: self, action:#selector(slideToRightWithGestureRecognizer)) 
swipeRightOrange.direction = UISwipeGestureRecognizerDirection.Right; 

let swipeLeftOrange:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(slideToLeftWithGestureRecognizer)) 
swipeLeftOrange.direction = UISwipeGestureRecognizerDirection.Left; 

@IBAction func slideToLeftWithGestureRecognizer(gestureRecognizer:UISwipeGestureRecognizer) 
{ 
viewOrange.backgroundColor = UIColor.blueColor() 
} 
@IBAction func slideToRightWithGestureRecognizer 
(gestureRecognizer:UISwipeGestureRecognizer) 
{ 
viewOrange.backgroundColor = UIColor.lightGrayColor() 
} 
0

Я представляю себе, что происходит, потому что вы добавляете правую салфетки жеста распознавань первый, который принимает все жесты и не передавая любой на влево красть жест распознавань.

Мое предложение было бы посмотреть на require(toFail:) и его similar methods.

Это позволит вам определить, какие распознаватели жестов должны потерпеть неудачу, прежде чем другие получат жесты. Например, вы можете сказать своему левому распознавателю жестов, что он требует, чтобы распознаватель жестов салфетки был неудачным. Затем, если правый распознаватель жестов распознает жест, но он не является правильным ударом, он передаст жест левому распознавателю жестов пальца.

32

Шаг 1: Добавить салфеткой Жест (ы) в viewDidLoad() метод.

override func viewDidLoad() { 
     super.viewDidLoad() 

     let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) 
     swipeLeft.direction = .left 
     self.view.addGestureRecognizer(swipeLeft) 

     let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) 
     swipeRight.direction = .right 
     self.view.addGestureRecognizer(swipeRight) 

     let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) 
     swipeUp.direction = .up 
     self.view.addGestureRecognizer(swipeUp) 

     let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) 
     swipeDown.direction = .down 
     self.view.addGestureRecognizer(swipeDown) 
    } 

Шаг 2: Проверьте обнаружение жест в handleGesture() метод

func handleGesture(gesture: UISwipeGestureRecognizer) -> Void { 
     if gesture.direction == UISwipeGestureRecognizerDirection.right { 
      print("Swipe Right") 
     } 
     else if gesture.direction == UISwipeGestureRecognizerDirection.left { 
      print("Swipe Left") 
     } 
     else if gesture.direction == UISwipeGestureRecognizerDirection.up { 
      print("Swipe Up") 
     } 
     else if gesture.direction == UISwipeGestureRecognizerDirection.down { 
      print("Swipe Down") 
     } 
} 

Я надеюсь, что это поможет кому-то.

+0

Спасибо .Это работа для меня. –

2

Swift 4, Xcode 9.2 Этот код позволит вам признать Размах направление пользователя по всей ViewController (Весь экран iPhone, а не конкретной кнопке) Спасибо @ Ram-Madhavan

import UIKit 

class ViewController: UIViewController { 

    //Label to show test and see Gesture direction. 

    @IBOutlet weak var swipeDirectionLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     //Defining the Various Swipe directions (left, right, up, down) 
     let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:))) 
     swipeLeft.direction = .left 
     self.view.addGestureRecognizer(swipeLeft) 

     let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:))) 
     swipeRight.direction = .right 
     self.view.addGestureRecognizer(swipeRight) 

     let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:))) 
     swipeUp.direction = .up 
     self.view.addGestureRecognizer(swipeUp) 

     let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:))) 
     swipeDown.direction = .down 
     self.view.addGestureRecognizer(swipeDown) 
    } 

    //Function to Print to console Swipe Direction, and Change the label to show the directions. The @objc before func is a must, since we are using #selector (above). You can add to the function, in my case, I'll add a sound, so when someone flips the page, it plays a page sound. 

    @objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void { 
     if gesture.direction == UISwipeGestureRecognizerDirection.right { 
      print("Swipe Right") 
      swipeDirectionLabel.text = "Swiped Right" 
     } 
     else if gesture.direction == UISwipeGestureRecognizerDirection.left { 
      print("Swipe Left") 
      swipeDirectionLabel.text = "Swiped Left" 

     } 
     else if gesture.direction == UISwipeGestureRecognizerDirection.up { 
      print("Swipe Up") 
      swipeDirectionLabel.text = "Swiped Up" 

     } 
     else if gesture.direction == UISwipeGestureRecognizerDirection.down { 
      print("Swipe Down") 
      swipeDirectionLabel.text = "Swiped Down" 

     } 
    } 
} 

Build

+1

Пожалуйста, отредактируйте свой код и добавьте некоторое объяснение, чтобы выделить части, которые заставляют его работать. Кодовые ответы не приветствуются. – WebDevBooster

0
var swipeGesture = UISwipeGestureRecognizer() 

вид Take и установить IBOutlet:

@IBOutlet weak var viewSwipe: UIView! 

Написать этот код на довольно viewDidLoad()

let direction: [UISwipeGestureRecognizerDirection] = [.up, .down, .left, .right] 
    for dir in direction{ 
     swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeView(_:))) 
     viewSwipe.addGestureRecognizer(swipeGesture) 
     swipeGesture.direction = dir 
     viewSwipe.isUserInteractionEnabled = true 
     viewSwipe.isMultipleTouchEnabled = true 
    } 

Теперь этот метод вызывается при распознавании жестов.

@objc func swipeView(_ sender:UISwipeGestureRecognizer){ 
    UIView.animate(withDuration: 1.0) { 
     if sender.direction == .right{ 
      self.viewSwipe.frame = CGRect(x: self.view.frame.size.width - self.viewSwipe.frame.size.width, y: self.viewSwipe.frame.origin.y, width: self.viewSwipe.frame.size.width, height: self.viewSwipe.frame.size.height) 
     }else if sender.direction == .left{ 
      self.viewSwipe.frame = CGRect(x: 0, y: self.viewSwipe.frame.origin.y, width: self.viewSwipe.frame.size.width, height: self.viewSwipe.frame.size.height) 
     }else if sender.direction == .up{ 
      self.viewSwipe.frame = CGRect(x: self.view.frame.size.width - self.viewSwipe.frame.size.width, y: 0, width: self.viewSwipe.frame.size.width, height: self.viewSwipe.frame.size.height) 
     }else if sender.direction == .down{ 
      self.viewSwipe.frame = CGRect(x: self.view.frame.size.width - self.viewSwipe.frame.size.width, y: self.view.frame.size.height - self.viewSwipe.frame.size.height, width: self.viewSwipe.frame.size.width, height: self.viewSwipe.frame.size.height) 
     } 
    } 
} 

100% работает в моем проекте и испытания