问题
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