Pinch gesture scale resetting to 1?

梦想的初衷 提交于 2019-12-10 10:56:23

问题


I was looking at this repo

https://github.com/mmohsin991/gestures/blob/master/gestures/ViewController.swift

and this example

http://www.raywenderlich.com/50398/opengl-es-transformations-gestures

I have the following code

      @IBOutlet var pinchProperty: UIPinchGestureRecognizer!
      @IBAction func pinchAction(sender: UIPinchGestureRecognizer) {
        if(dbg){println("scale \(pinchProperty.scale)")}
        let pinch: CGFloat = pinchProperty.scale
        switch pinchProperty.state{
        case .Began:
          println("pinch started")
        case .Changed:
          geometryNodeMain.scale = SCNVector3(x:Float(pinch),y:Float(pinch),z:Float(pinch))
        case .Ended:
          println("pinch ended")
        case .Cancelled:
          break
        case .Failed:
          break
        case .Possible:
          break
        default:
          break
        }
      }

Initially, the pinch works and zooms in and out but then the scale resets to 1. Converting the openGL code http://www.raywenderlich.com/50398/opengl-es-transformations-gestures is messy.

Can someone help convert this code?


回答1:


This works.

Initialize variables somewhere.

  var scaleStart:CGFloat = 1.0
  var scaleEnd:CGFloat = 1.0

then something like this

 @IBOutlet var pinchProperty: UIPinchGestureRecognizer!
  @IBAction func pinchAction(sender: UIPinchGestureRecognizer) {

    if(dbg){println("scale \(pinchProperty.scale)")}

    let pinch: CGFloat = pinchProperty.scale

    switch pinchProperty.state{
    case .Began:
      scaleStart = scaleEnd*pinch
      if(dbg){println("pinch started \(scaleStart)")}
    case .Changed:
      scaleStart = scaleEnd*pinch
      geometryNodeMain.scale = SCNVector3(
        x:Float(scaleStart),
        y:Float(scaleStart),
        z:Float(scaleStart)
      )
    case .Ended:
      scaleEnd = scaleStart
      if(dbg){println("pinch ended \(scaleEnd)")}
    case .Cancelled:
      break
    case .Failed:
      break
    case .Possible:
      break
    default:
      break
    }
  }


来源:https://stackoverflow.com/questions/29280004/pinch-gesture-scale-resetting-to-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!