首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用SKCameraNode的捏手势

不使用SKCameraNode的捏手势
EN

Stack Overflow用户
提问于 2018-02-03 00:33:12
回答 1查看 642关注 0票数 0

我正在使用Swift 4使用SpriteKit和SKTileMapNode和SKCameraNode。我希望能够使用相机在贴图节点上进行平移/捏/缩放。我的工作很好,但我遇到了一些问题,夹紧/放大。

  1. 趁我能拿出点钱去工作。每次发生另一次夹点时,它都会重置大小。举个例子,我会让它变小,然后再去捏一下,一碰到屏幕,屏幕就会跳起来。它确实让我再次捏,放大/缩小,但不是根据我的大小,我在以前的捏。我想我可能需要存储尺寸调整,并使用它,但不确定如何使用。
  2. 我的捏缩反了。当我捏一下放大,它会放大,反之亦然。
  3. 当我达到最小/最大标度限制时,它不再前进,但在极限时会结巴。

下面是我处理夹点的功能:

代码语言:javascript
运行
复制
@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。我发现的例子要么我无法工作,试图从一个视图转换为一个相机,或者他们没有给出一个捏的例子。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2018-02-18 21:32:33

趁我能拿出点钱去工作。每次发生另一次夹点时,它都会重置大小。举个例子,我会让它变小,然后再去捏一下,一碰到屏幕,屏幕就会跳起来。它确实让我再次捏,放大/缩小,但不是根据我的大小,我在以前的捏。我想我可能需要存储尺寸调整,并使用它,但不确定如何使用。

这是因为手势识别器在识别之间保留其属性。当手势结束时,您可能希望重置scale。例如,可以使用如下内容启动您的方法:

代码语言:javascript
运行
复制
guard pinchGesture.state != .ended else {
    pinchGesture.scale = 0
    return
}

我的捏缩反了。当我捏一下放大,它会放大,反之亦然。

来自SKCameraNode文档:

这样,相机的位置、比例和旋转都会对场景的渲染产生相反的影响。例如,如果相机向右移动10个像素,那么场景就会呈现为其他所有东西都向左移动了10个像素。类似地,如果相机节点的xScaleyScale为2.0,则场景呈现的方式就好像每一段距离都是正常大小的一半,从而有效地增加了摄像机视口的可见区域。

我不清楚你到底在寻找什么效果,但你可能想通过除以一个来倒转捏手势识别器的刻度,例如:

代码语言:javascript
运行
复制
var deltaScale = pinchGesture.scale / 1
camera?.xScale = deltaScale
camera?.yScale = deltaScale

当我达到最小/最大标度限制时,它不再前进,但在极限时会结巴。

不确定没有看到特定的值,但这可能是由四舍五入引起的。如果您超出了范围,您可能希望避免接触SKCameraNode。您可以尝试这样的方法:

代码语言:javascript
运行
复制
var deltaScale = pinchGesture.scale / 1

guard deltaScale > minScale && deltaScale < maxScale else { return } 

camera?.xScale = deltaScale
camera?.yScale = deltaScale
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48592771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档