web-dev-qa-db-ja.com

タッチスクリーンに触れた場所から座標を取得する

この時点で特定のUIImageを配置するために、タッチスクリーンを押した場所から座標を取得しようとします。

これどうやってするの?

23
Lukas Köhl

UIResponderなどのUIViewサブクラス内:

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

これは、ビュー座標でCGPointを返します。

Swift 3構文で更新)

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

Swift 4構文で更新)

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first!
    let location = touch.location(in: self.view)
}
37
Mundi

Swift 3-のためにこれを進めています-私は使用しています:

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)
    }
}

同じ結果を得るためのより明確でエレガントな方法を喜んで聞いてください

19
LittleNose

これは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)

    }
}
15
kb920

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)
    }
}

ソース

3
Mike Lee

ViewController用の最新のSwift4.0

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
vikash kumar

SwiftUIの場合、HostingController.Swiftという名前の新しい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)
        }
    }
}

次に、SceneDelegate.Swiftの次のコード行を変更しました

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

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

SwiftUIは、基本的にUIHostingControllerを介してViewControllerにラップされます。少なくとも私はそう思う。

これがお役に立てば幸いです!

ごあいさつkrjw

0
krjw