Getting the coordinates from the location I touch the touchscreen

后端 未结 6 1277
温柔的废话
温柔的废话 2020-12-03 05:15

I try to get the coordinates from the location where I hit the touchscreen to do put a specific UIImage at this point.

How can I do this?

相关标签:
6条回答
  • 2020-12-03 05:16

    Taking this forward for Swift 3 - I'm using:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first {
            let position = touch.location(in: self)
            print(position.x)
            print(position.y)
        }
    }
    

    Happy to hear any clearer or more elegant ways to produce the same result

    0 讨论(0)
  • 2020-12-03 05:26

    In a UIResponder subclass, such as UIView:

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        let touch = touches.anyObject()! as UITouch
        let location = touch.locationInView(self)
    }
    

    This will return a CGPoint in view coordinates.

    Updated with Swift 3 syntax

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        let touch = touches.first!
        let location = touch.location(in: self)
    }
    

    Updated with Swift 4 syntax

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first!
        let location = touch.location(in: self.view)
    }
    
    0 讨论(0)
  • 2020-12-03 05:27

    For SwiftUI I created a new swift file called HostingController.swift

    import Foundation
    import UIKit
    import SwiftUI
    
    class HostingController: UIHostingController<ContentView> {
    
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            if let touch = touches.first {
                let position = touch.location(in: view)
                print(position)
            }
        }
    }
    

    Then I changed the following lines of code in the SceneDelegate.swift

    window.rootViewController = UIHostingController(rootView: ContentView())
    

    to

    window.rootViewController = HostingController(rootView: ContentView())
    

    SwiftUI is basically wrapped in a ViewController via the UIHostingController. At least thats how I think it is.

    I hope this helps!

    Greetings krjw

    0 讨论(0)
  • 2020-12-03 05:28

    This is work in Swift 2.0

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first {
            let position :CGPoint = touch.locationInView(view)
            print(position.x)
            print(position.y)
    
        }
    }
    
    0 讨论(0)
  • 2020-12-03 05:35

    Swift 4.0

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first {
            let position = touch.location(in: view)
            print(position)
        }
    }
    

    source

    0 讨论(0)
  • 2020-12-03 05:38

    Latest swift4.0, For ViewController

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let location = touch.location(in: self.view)
        print(location.x)
        print(location.y)
      }
    }
    
    0 讨论(0)
提交回复
热议问题