ios - Swiftui Pan Gesture 获取 View 的水平位置

标签 ios swift gesture

ja 在照片中垂直黑色 View 上的手势。

我想知道它在屏幕级别的位置,因为我想执行一个功能,例如,如果我将 View 向右滑动超过屏幕中心的一半

代码:

@objc func detectPan(recognizer: UIPanGestureRecognizer) {

    switch recognizer.state {
    case .began:
        self.startingConstant = self.centerConstraint.constant
    case .changed:
        let translation = recognizer.translation(in: self.view)
        self.centerConstraint.constant = self.startingConstant - translation.x

    default:
        break
    }
}

Fist image

Second image

最佳答案

您可以在 View 之间转换坐标(点和框架),只要它们位于同一层次结构中即可。您有两种方法 convert(:to:)convert(:from:)

在您的情况下,您似乎想要将 View 中的位置转换为屏幕,这是您的关键窗口 UIApplication.shared.keyWindow

所以通常屏幕上的点是 let pointOnScreen = myView.convert(pointInMyView, to: UIApplication.shared.keyWindow)

所以在你的情况下:

let myView = self.view
let pointInMyView = recognizer.locationInView(myView)
let pointOnScreen = myView.convert(pointInMyView, to: UIApplication.shared.keyWindow)

let isViewGestureOnRightSideOfTheScreen = pointOnScreen.x > UIApplication.shared.keyWindow!.frame.midX

关于ios - Swiftui Pan Gesture 获取 View 的水平位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50985936/

相关文章:

android - 如何在 Android 中的 TextView 上设置手势事件

iphone - ios 在条件下继续

ios - Swift: TableView 部分标题

ios - 当离开节点位置时,触摸事件不会使 spritenode 重置其大小

swift - cellForRowAtIndexPath 加载 2 个单元格影响我的 ScrollView

swift - 如何通过 SwiftUI Tap Gesture 使用键修饰符(选项/命令/控制)

ios - 如何用UIBezierPath删除徒手画?

ios - iPad视网膜显示屏上的黑屏

ios - Swift - 将手势识别器添加到表格单元格中的对象

android - 如何使用Android Map 以手势缩放(类似iphone)