You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何限制平移手势仅在捏合手势进行时响应

实现方案

要实现仅捏合过程中响应平移、拦截单指平移的需求,按以下步骤修改代码即可:

步骤说明

  • 新增类级别的状态变量,记录捏合手势的当前执行状态
  • 在捏合手势的生命周期回调中同步更新状态变量
  • 平移手势执行前增加状态校验,仅捏合进行中才触发平移逻辑
  • 可选补充:给平移手势设置minimumNumberOfTouches = 2,从手势触发层面拦截单指操作,双重保障

修改后完整代码

// 新增:记录当前是否处于捏合操作中
var isPinching = false

@IBAction func pinchPiece(_ pinchGestureRecognizer: UIPinchGestureRecognizer) {
    // 捏合开始时标记状态
    if pinchGestureRecognizer.state == .began {
        isPinching = true
    }
    // 捏合结束/失败/取消时重置状态
    if [.ended, .cancelled, .failed].contains(pinchGestureRecognizer.state) {
        isPinching = false
        UIView.animate(withDuration: 0.3, animations: {
            pinchGestureRecognizer.view?.transform = CGAffineTransform.identity
        })
        return
    }
    
    guard pinchGestureRecognizer.state == .changed,
          let piece = pinchGestureRecognizer.view else {
        return
    }
    adjustAnchor(for: pinchGestureRecognizer)
    
    let scale = pinchGestureRecognizer.scale
    piece.transform = piece.transform.scaledBy(x: scale, y: scale)
    pinchGestureRecognizer.scale = 1
}

@IBAction func panPiece(_ panGestureRecognizer: UIPanGestureRecognizer) {
    // 新增:仅捏合过程中才响应平移
    guard isPinching,
          panGestureRecognizer.state == .began || panGestureRecognizer.state == .changed,
          let piece = panGestureRecognizer.view else {
        return
    }
    let translation = panGestureRecognizer.translation(in: piece.superview)
    piece.center = CGPoint(x: piece.center.x + translation.x, y: piece.center.y + translation.y)
    panGestureRecognizer.setTranslation(.zero, in: piece.superview)
}

public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
                            shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    true
}

拓展说明

如果你的需求实际是所有双指平移都响应,仅拦截单指平移,不需要和捏合手势绑定,那不需要新增isPinching变量,只需要在初始化平移手势的时候加一行配置即可:

panGestureRecognizer.minimumNumberOfTouches = 2

内容的提问来源于stack exchange,提问作者Curiosity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:54:04