Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIPangestureRecognitor处理程序使我的应用程序崩溃-swift_Ios_Swift_Uipangesturerecognizer - Fatal编程技术网

Ios UIPangestureRecognitor处理程序使我的应用程序崩溃-swift

Ios UIPangestureRecognitor处理程序使我的应用程序崩溃-swift,ios,swift,uipangesturerecognizer,Ios,Swift,Uipangesturerecognizer,我有一个包含UIImageView的应用程序。我在父UIImageView的子视图中画了一个小圆圈。我希望用户能够触摸并拖动主UIImageView中的蓝色小圆圈。我已为此子视图设置了UIPangestureRecognitor。我正在尝试测试我的UIPangestureRecognitizer处理程序是否被触发,但当我触摸并拖动主UIImageView时,我的应用程序崩溃,出现以下错误: 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIVi

我有一个包含UIImageView的应用程序。我在父UIImageView的子视图中画了一个小圆圈。我希望用户能够触摸并拖动主UIImageView中的蓝色小圆圈。我已为此子视图设置了UIPangestureRecognitor。我正在尝试测试我的UIPangestureRecognitizer处理程序是否被触发,但当我触摸并拖动主UIImageView时,我的应用程序崩溃,出现以下错误:

由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIView] firstDotHandlerWithSender::发送到实例的选择器无法识别 0x103507d80'

斯威夫特:

UIPangestureRecognitor的目标错误

目标告诉平移手势选择器的位置。我想你把它弄糊涂了,它应该作用于哪个元素。我刚出生时也犯了同样的错误:D

目标

对象,它是由发送的操作消息的收件人 当接收器识别出一个手势时。nil不是有效值


你说得对。非常感谢。如果你不介意的话。我注意到我不必触摸我的蓝色圆圈来拖动它。我能够拖动圆圈,即使我接触到离它很远的地方。你能给我个建议吗?@巴比伦哪一个是蓝色的圆圈?您可以将平移手势添加到它。还要检查所述视图是否启用了使用交互。蓝色圆圈在子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:)))