我正在使用Swift 4使用SpriteKit和SKTileMapNode和SKCameraNode。我希望能够使用相机在贴图节点上进行平移/捏/缩放。我的工作很好,但我遇到了一些问题,夹紧/放大。
下面是我处理夹点的功能:
@objc func handlePinch(pinchGesture: UIPinchGestureRecognizer) {
if pinchGesture.state == .began || pinchGesture.state == .changed {
let currentScale: CGFloat = (camera?.xScale)!
let minScale: CGFloat = 0.5
let maxScale: CGFloat = 2.0
let zoomSpeed: CGFloat = 0.5
var deltaScale = pinchGesture.scale
deltaScale = ((deltaScale - 1) * zoomSpeed) + 1
deltaScale = min(deltaScale, maxScale / currentScale)
deltaScale = max(deltaScale, minScale / currentScale)
camera?.xScale = deltaScale
camera?.yScale = deltaScale
}
}
让我知道,如果您有任何建议,因为我已经看了一堆,我找不到例子,人们正在使用SKCameraNode。我发现的例子要么我无法工作,试图从一个视图转换为一个相机,或者他们没有给出一个捏的例子。任何帮助都将不胜感激!
发布于 2018-02-18 13:32:33
趁我能拿出点钱去工作。每次发生另一次夹点时,它都会重置大小。举个例子,我会让它变小,然后再去捏一下,一碰到屏幕,屏幕就会跳起来。它确实让我再次捏,放大/缩小,但不是根据我的大小,我在以前的捏。我想我可能需要存储尺寸调整,并使用它,但不确定如何使用。
这是因为手势识别器在识别之间保留其属性。当手势结束时,您可能希望重置scale
。例如,可以使用如下内容启动您的方法:
guard pinchGesture.state != .ended else {
pinchGesture.scale = 0
return
}
我的捏缩反了。当我捏一下放大,它会放大,反之亦然。
来自SKCameraNode
文档:
这样,相机的位置、比例和旋转都会对场景的渲染产生相反的影响。例如,如果相机向右移动10个像素,那么场景就会呈现为其他所有东西都向左移动了10个像素。类似地,如果相机节点的
xScale
和yScale
为2.0,则场景呈现的方式就好像每一段距离都是正常大小的一半,从而有效地增加了摄像机视口的可见区域。
我不清楚你到底在寻找什么效果,但你可能想通过除以一个来倒转捏手势识别器的刻度,例如:
var deltaScale = pinchGesture.scale / 1
camera?.xScale = deltaScale
camera?.yScale = deltaScale
当我达到最小/最大标度限制时,它不再前进,但在极限时会结巴。
不确定没有看到特定的值,但这可能是由四舍五入引起的。如果您超出了范围,您可能希望避免接触SKCameraNode
。您可以尝试这样的方法:
var deltaScale = pinchGesture.scale / 1
guard deltaScale > minScale && deltaScale < maxScale else { return }
camera?.xScale = deltaScale
camera?.yScale = deltaScale
https://stackoverflow.com/questions/48592771
复制相似问题