我正在使用带有 SKTileMapNode 和 SKCameraNode 的 SpriteKit 使用 Swift 4。我希望能够使用相机在瓦片地图节点上平移/捏合/缩放。我的平移效果很好,但在捏/缩放方面遇到了一些问题。
虽然我可以工作。每次发生另一次捏合时,它都会重置大小。因此,例如,我将其缩小,然后再次捏合,一旦我触摸屏幕,它的大小就会跳起来。它确实让我再次捏以放大/缩小,但不是基于我在之前捏的大小。我想我可能需要存储调整大小并使用它,但不确定如何。
我的捏缩放是相反的。当我捏放大时,它会缩小,反之亦然。
当我达到最小/最大比例限制时,它会停止走得更远,但在达到限制时会结结巴巴。
这是我处理夹点的函数:
@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 的示例。我发现的示例要么我无法尝试从视图转换为相机,要么它们没有给出一个捏的例子。任何帮助将不胜感激!