【发布时间】:2017-06-06 08:00:02
【问题描述】:
我可以使用下面的代码在 iOS 中自动创建一个 3D 立方体。
问题是:如何用两个手势构建一个 3D 立方体?
通过捏合手势,我想在 XZ 轴上构建一个立方体底座。
然后用拖动手势我想在Y轴上构建一个高度的立方体。
怎么做?
import UIKit
import SceneKit
class GameViewController: UIViewController {
var scnView: SCNView!
var scnScene: SCNScene!
var cameraNode: SCNNode!
override func viewDidLoad() {
super.viewDidLoad()
setupView()
setupScene()
setupCamera()
spawnShape()
}
override func shouldAutorotate() -> Bool {
return true
}
override func prefersStatusBarHidden() -> Bool {
return true
}
func setupView() {
scnView = self.view as! SCNView
scnView.allowsCameraControl = true
scnView.autoenablesDefaultLighting = true
}
func setupScene() {
scnScene = SCNScene()
scnView.scene = scnScene
scnScene.background.contents = "BG.scnassets/BgTexture.png"
}
func setupCamera() {
cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 12)
scnScene.rootNode.addChildNode(cameraNode)
}
func spawnShape() {
var geometry: SCNGeometry
switch ShapeType.random() {
case .Box:
geometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.1)
}
let geometryNode = SCNNode(geometry: geometry)
scnScene.rootNode.addChildNode(geometryNode)
}
}
我尝试实现UIPinchGestureRecognizer() 和UIPanGestureRecognizer() 子类,但我失败了。不知道怎么弄。
var pinchGesture = UIPinchGestureRecognizer()
var dragGesture = UIPanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
setupView()
setupScene()
setupCamera()
spawnShape()
self.scnView.userInteractionEnabled = true
self.scnView.multipleTouchEnabled = true
self.pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchRecognized(_:)))
self.dragGesture = UIPanGestureRecognizer(target: self, action: #selector(panRecognized(_:)))
self.scnView.addGestureRecognizer(self.pinchGesture)
self.scnView.addGestureRecognizer(self.dragGesture)
}
@IBAction func pinchRecognized(pinch: UIPinchGestureRecognizer) {
........
}
@IBAction func panRecognized(pan: UIPanGestureRecognizer) {
........
}
【问题讨论】:
-
你有没有尝试过?如果您尝试自己实现它,这听起来是一项非常重要的任务。
-
所以发布您尝试过的代码并解释它是如何不起作用的。
-
您不能使用将您的宽度和长度比例设置为 pinchgesture 比例并在每次调用时将 pinchgesturescale 重置为 1.0 吗?这将实现增量增长。
-
与代码/实现无关;关于 UX 的一个想法:几十年来,我使用了很多 3D 设计应用程序,包括用于 iPad Pro 等的新 iOS 应用程序。对于最初的平面创建,我认为单点触摸和拖动操作将是巨大的,而不是捏更好的。用户可以从任何角落开始,并沿所需方向拖动以创建基本平面。完成此操作后,让他们满意的是,让他们添加第二根手指并向上或向下拖动以将平面挤压成 3D 立方体,或者释放并用一根手指再次拖动以执行相同操作。
标签: 3d swift2 ios9 scenekit gesture