Ios UIPangestureRecognitor处理程序使我的应用程序崩溃-swift
我有一个包含UIImageView的应用程序。我在父UIImageView的子视图中画了一个小圆圈。我希望用户能够触摸并拖动主UIImageView中的蓝色小圆圈。我已为此子视图设置了UIPangestureRecognitor。我正在尝试测试我的UIPangestureRecognitizer处理程序是否被触发,但当我触摸并拖动主UIImageView时,我的应用程序崩溃,出现以下错误: 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIView] firstDotHandlerWithSender::发送到实例的选择器无法识别 0x103507d80' 斯威夫特: UIPangestureRecognitor的目标错误 目标告诉平移手势选择器的位置。我想你把它弄糊涂了,它应该作用于哪个元素。我刚出生时也犯了同样的错误:D 从 目标 对象,它是由发送的操作消息的收件人 当接收器识别出一个手势时。nil不是有效值Ios UIPangestureRecognitor处理程序使我的应用程序崩溃-swift,ios,swift,uipangesturerecognizer,Ios,Swift,Uipangesturerecognizer,我有一个包含UIImageView的应用程序。我在父UIImageView的子视图中画了一个小圆圈。我希望用户能够触摸并拖动主UIImageView中的蓝色小圆圈。我已为此子视图设置了UIPangestureRecognitor。我正在尝试测试我的UIPangestureRecognitizer处理程序是否被触发,但当我触摸并拖动主UIImageView时,我的应用程序崩溃,出现以下错误: 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIVi
你说得对。非常感谢。如果你不介意的话。我注意到我不必触摸我的蓝色圆圈来拖动它。我能够拖动圆圈,即使我接触到离它很远的地方。你能给我个建议吗?@巴比伦哪一个是蓝色的圆圈?您可以将平移手势添加到它。还要检查所述视图是否启用了使用交互。蓝色圆圈在子UIIView的层中绘制,在本例中为“firstDotView”@babylon如果它是一个层,这应该会有所帮助-如果我在一个视图中有多个子层,我的理解是,您不能将UIPangestureRecogeners应用于层?
var firstDotView: UIView?
@IBOutlet weak var imgView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
firstDotView = UIView.init()
firstDotView?.frame = imgView.bounds
imgView.addSubview(firstDotView!)
// DRAW A FILLED IN BLUE CIRCLE
drawBlueCircle()
imgView.isUserInteractionEnabled = true
firstDotView?.isUserInteractionEnabled = true
// ADD GESTURE RECOGNIZER
let firstDotPanRecgnzr = UIPanGestureRecognizer.init(target: firstDotView!, action: #selector(firstDotHandler(sender:)))
firstDotView?.addGestureRecognizer(firstDotPanRecgnzr)
}
@objc func firstDotHandler(sender: UIPanGestureRecognizer) -> Void {
print("translation ...")
let firstDot = sender.view
let translation = sender.translation(in: view)
if(sender.state == .began || sender.state == .changed){
firstDot?.center = CGPoint.init(x: (firstDot?.center.x)! + translation.x, y: (firstDot?.center.y)! + translation.y)
sender.setTranslation(CGPoint.zero, in: self.view)
}
}
func drawBlueCircle(){
let layer = CAShapeLayer()
layer.path = UIBezierPath.init(roundedRect: CGRect.init(x: 60, y: 60, width: 30, height: 30), cornerRadius: 50).cgPath
layer.fillColor = UIColor.blue.cgColor
firstDotView?.layer.addSublayer(layer)
}
let firstDotPanRecgnzr = UIPanGestureRecognizer(target: self, action: #selector(firstDotHandler(sender:)))