ARKit에서 제스처를 사용하여 객체 크기 조정 및 회전

7258 단어 SceneKitiOSSwiftARKit
일단 물체를 AR 공간에 놓았을 때, 그 물체를 조정하고 싶을 때가 있다고 생각합니다.

그럴 때 사용할 수 있는 손가락 제스처를 사용한 물체를 조종하기 위한 구현을 소개합니다.

핀치 인 아웃으로 확대 축소





UIPinchGestureRecognizer 구현



viewDidLoad 등으로 gesture를 add합니다.
// scale gesture
let pinch = UIPinchGestureRecognizer(
    target: self,
    action: #selector(type(of: self).scenePinchGesture(_:))
)
pinch.delegate = self
sceneView.addGestureRecognizer(pinch)

제스처에서 호출되는 메서드 정의


@objc func scenePinchGesture(_ recognizer: UIPinchGestureRecognizer) {
    if recognizer.state == .began {
        lastGestureScale = 1
    }

    let newGestureScale: Float = Float(recognizer.scale)

    // ここで直前のscaleとのdiffぶんだけ取得しときます
    let diff = newGestureScale - lastGestureScale

    let currentScale = boxNode.scale

    // diff分だけscaleを変化させる。1は1倍、1.2は1.2倍の大きさになります。
    boxNode.scale = SCNVector3Make(
        currentScale.x * (1 + diff),
        currentScale.y * (1 + diff),
        currentScale.z * (1 + diff)
    )
    // 保存しとく
    lastGestureScale = newGestureScale
}

회전





UIRotationGestureRecognizer 정의


// rotate gesture
let rotaion = UIRotationGestureRecognizer(
    target: self,
    action: #selector(type(of: self).sceneRotateGesture(_:))
)
rotaion.delegate = self
sceneView.addGestureRecognizer(rotaion)

제스처로 불리는 메소드 정의


@objc func sceneRotateGesture(_ recognizer: UIRotationGestureRecognizer) {
    let newGestureRotation = Float(recognizer.rotation)

    if recognizer.state == .began {
        lastGestureRotation = 0
    }
    // 前回とのdiffを取得
    let diff = newGestureRotation - lastGestureRotation

    // 今回はオイラーアングルのyを取るため、y軸中心の回転をさせます。
    let eulerY = boxNode.eulerAngles.y
    boxNode.eulerAngles.y = eulerY - diff

    lastGestureRotation = newGestureRotation
}

요약


  • UIPinchGestureRecognizer를 사용하여 물체를 손가락으로 늘리십시오
  • UIRotationGestureRecognizer를 사용하여 물체를 손가락으로 돌리십시오

  • 샘플 코드



    htps : // 기주 b. 코 m / k 보 y-시 lゔぇrgym / 아 의 Gesture를 확인하십시오!

    좋은 웹페이지 즐겨찾기