我的视图层次如下:
- View For User's Img + Emoji (A)
- View With UI elements. (B)
在viewDidLoad中,我为表情符号创建UIImageViews,将它们添加到A中并添加手势识别器(pan、夹点、旋转):
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:
@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
}问题:锅漏斗没有着火。旋转和夹紧工作。但平移不是。(不能禁用用户交互,以覆盖视图,因为它有按钮)
发布于 2017-03-22 00:52:11
好的,我看了一下代码,发现了两个可能的问题:
他说:你也在故事板上设置了夹子、平底锅和旋转手势识别器。这些可能是多余的。只是说说而已。这确实不是你的pan手势识别器不起作用的问题。
2:用于控制的UIView包括您的表情符号和图像视图,并将接管触摸。您不需要UI控件的全屏视图,因为您似乎不需要对视图本身做任何事情。相反,您可以简单地将按钮放在viewForImgAndEmoji上主屏幕上的正确位置。这样,任何屏幕上的触点都可以到达viewForImgAndEmoji,除非在有按钮的地方。
我用这种方式修改了故事板,在那个时候我可以很好地得到平底锅的手势。如果你需要我澄清任何事情,请告诉我,因为我不确定我是否对这个问题足够清楚:)
注意:当您修复上面的问题时,您会遇到一个问题,即您会发现并非所有的触摸寄存器都是这样的,因为手势识别器附在每个贴纸上,而贴纸本身可能太小,无法检测到像捏手势这样的东西。最好添加viewForImgAndEmoji作为手势处理程序,激活每个粘贴/表情符号作为手势的接收方,在尝试捏、旋转或平底锅之前通过点击选择表情符号。只是一个建议:)
发布于 2017-03-21 23:57:25
您可能需要实现以下委托方法:
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}https://stackoverflow.com/questions/42940186
复制相似问题