首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIPanGestureRecognizer没有兴奋起来。Swift 3

UIPanGestureRecognizer没有兴奋起来。Swift 3
EN

Stack Overflow用户
提问于 2017-03-21 23:37:59
回答 2查看 1.2K关注 0票数 1

我的视图层次如下:

  • 视图
代码语言:javascript
复制
- View For User's Img + Emoji (A)
- View With UI elements. (B)

在viewDidLoad中,我为表情符号创建UIImageViews,将它们添加到A中并添加手势识别器(pan、夹点、旋转):

代码语言:javascript
复制
 let emojiView = UIImageView(image: emoji)
            emojiView.tag = n
            emojiView.frame = CGRect(x: 153, y: 299, width: 70, height: 70)
            emojiView.isUserInteractionEnabled = true

            let pan = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(recognizer:)))
            pan.delegate = self
            emojiView.addGestureRecognizer(pan)

            let pinch = UIPinchGestureRecognizer(target: self, action: #selector(self.handlePinch(recognizer:)))
            pinch.delegate = self
            emojiView.addGestureRecognizer(pinch)

            let rotate = UIRotationGestureRecognizer(target: self, action: #selector(self.handleRotate(recognizer:)))
            rotate.delegate = self
            emojiView.addGestureRecognizer(rotate)

稍后,我声明IBActions:

代码语言:javascript
复制
@IBAction func handlePan(recognizer: UIPanGestureRecognizer) {
    let translation = recognizer.translation(in: self.viewForImgAndEmoji)
    if let view = recognizer.view {
        view.center = CGPoint(x:view.center.x + translation.x,
                              y:view.center.y + translation.y)
    }
    recognizer.setTranslation(CGPoint.zero, in: self.viewForImgAndEmoji)
}

@IBAction func handlePinch(recognizer: UIPinchGestureRecognizer) {

    let pinchPoint = recognizer.location(in: viewForImgAndEmoji)
    let ourEmojiView = viewForImgAndEmoji.hitTest(pinchPoint, with: nil)

    ourEmojiView!.transform = ourEmojiView!.transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
    recognizer.scale = 1

}

@IBAction func handleRotate(recognizer: UIRotationGestureRecognizer){

    let rotatePoint = recognizer.location(in: viewForImgAndEmoji)
    let ourEmojiView = viewForImgAndEmoji.hitTest(rotatePoint, with: nil)

    ourEmojiView!.transform = ourEmojiView!.transform.rotated(by: recognizer.rotation)
    recognizer.rotation = 0
}

问题:锅漏斗没有着火。旋转和夹紧工作。但平移不是。(不能禁用用户交互,以覆盖视图,因为它有按钮)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-22 00:52:11

好的,我看了一下代码,发现了两个可能的问题:

他说:你也在故事板上设置了夹子、平底锅和旋转手势识别器。这些可能是多余的。只是说说而已。这确实不是你的pan手势识别器不起作用的问题。

2:用于控制的UIView包括您的表情符号和图像视图,并将接管触摸。您不需要UI控件的全屏视图,因为您似乎不需要对视图本身做任何事情。相反,您可以简单地将按钮放在viewForImgAndEmoji上主屏幕上的正确位置。这样,任何屏幕上的触点都可以到达viewForImgAndEmoji,除非在有按钮的地方。

我用这种方式修改了故事板,在那个时候我可以很好地得到平底锅的手势。如果你需要我澄清任何事情,请告诉我,因为我不确定我是否对这个问题足够清楚:)

注意:当您修复上面的问题时,您会遇到一个问题,即您会发现并非所有的触摸寄存器都是这样的,因为手势识别器附在每个贴纸上,而贴纸本身可能太小,无法检测到像捏手势这样的东西。最好添加viewForImgAndEmoji作为手势处理程序,激活每个粘贴/表情符号作为手势的接收方,在尝试捏、旋转或平底锅之前通过点击选择表情符号。只是一个建议:)

票数 1
EN

Stack Overflow用户

发布于 2017-03-21 23:57:25

您可能需要实现以下委托方法:

代码语言:javascript
复制
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42940186

复制
相关文章

相似问题

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