我需要使用滑动来识别向下然后向右滑动的手势.但在swift上,手势识别器已经预先确定了正确的方向..我不知道如何把它用于其他方向..

推荐答案

每个方向都需要一个UISwipeGestureRecognizer.这有点奇怪,因为UISwipeGestureRecognizer.direction属性是一个选项样式的位掩码,但每个识别器只能处理一个方向.如果需要,可以将它们全部发送到同一个处理程序,并在那里进行排序,或者将它们发送到不同的处理程序.以下是一个实现:

override func viewDidLoad() {
    super.viewDidLoad()

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

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

@objc func respondToSwipeGesture(gesture: UIGestureRecognizer) {

    if let swipeGesture = gesture as? UISwipeGestureRecognizer {

        switch swipeGesture.direction {
        case .right:
            print("Swiped right")
        case .down:
            print("Swiped down")
        case .left:
            print("Swiped left")
        case .up:
            print("Swiped up")
        default:
            break
        }
    }
}

Swift 3:

override func viewDidLoad() {
    super.viewDidLoad()

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

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

func respondToSwipeGesture(gesture: UIGestureRecognizer) {
    if let swipeGesture = gesture as? UISwipeGestureRecognizer {
        switch swipeGesture.direction {
        case UISwipeGestureRecognizerDirection.right:
            print("Swiped right")
        case UISwipeGestureRecognizerDirection.down:
            print("Swiped down")
        case UISwipeGestureRecognizerDirection.left:
            print("Swiped left")
        case UISwipeGestureRecognizerDirection.up:
            print("Swiped up")
        default:
            break
        }
    }
}

Ios相关问答推荐

在 Swift 中合并子数组

辅助功能判断器无法在 macOS Monterey 版本 12.3 上的 Xcode 版本 13.3 上运行

在 tableview 中下载图像缩略图时如何提高滚动性能

如何从 scendelegate 打开我的标签栏控制器

为应用预览捕获 iOS 模拟器视频

SwiftUI NavigationView navigationBarTitle LayoutConstraints 问题

Flutter:CocoaPods 的 specs 存储库过时,无法满足依赖关系

SwiftUI 应用生命周期 iOS14 AppDelegate 代码放哪里?

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

UITableView 行动画持续时间和完成回调

Xcode 缺少支持文件 iOS 12.2 (16E227)

滑动列表项以获取更多选项(Flutter)

警告:子上下文类型失败:提供给“CellRenderer”的“数字”类型的子上下文“virtualizedCell.cellKey”无效,应为“字符串”

获取文档文件夹中的文件列表

警告:不推荐使用“字符”:请直接使用字符串或子字符串

Xcode9 iOS11 应用程序版本中缺少 CFBundleIconName

缺少营销图标

定位服务在 iOS 11 中不起作用

在默认网络浏览器中打开 URL

链接器命令失败,退出代码 1(使用 -v 查看调用),Xcode 8,Swift 3