UITapGestureRecognizer 只调用一次

UITapGestureRecognizer called only once

我有这个代码:

func initPlaceHolder(width: CGFloat, height: CGFloat){
    var firstPlaceHolderPosition: CGFloat = 0;

    UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 0)

    let context = UIGraphicsGetCurrentContext()
    let rectangle = CGRect(x: 0, y: 0, width: width, height: height)

    CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
    CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor)
    CGContextSetLineWidth(context, 1)

    CGContextAddRect(context, rectangle)
    CGContextDrawPath(context, .FillStroke)

    let img = UIGraphicsGetImageFromCurrentImageContext()

    for i in 1...4 {
        let imageView = StompUIImageView(frame: CGRect(x: firstPlaceHolderPosition, y: 0, width: width, height: height))
        let tap = UITapGestureRecognizer(target: self, action: "doubleTapped:")

        tap.numberOfTapsRequired = 2

        imageView.image = img
        imageView.addGestureRecognizer(tap)
        imageView.userInteractionEnabled = true
        imageView.stompID = String(i)
        imageView.stompSlot = i

        addSubview(imageView)

        firstPlaceHolderPosition = firstPlaceHolderPosition + width + 10

        UIGraphicsEndImageContext()
    }
}

func doubleTapped(sender: UITapGestureRecognizer) {
    let view = sender.view as! StompUIImageView
    print(view.stompID)
}

基本上,doubleTapped 处理程序只为第一个 UIImageView 调用,而不是为所有 4 个调用。 抱歉,我是 ios 开发的新手,我很难理解。

感谢您的帮助

试试这个...

用这个替换你的代码....

希望对您有所帮助。

func initPlaceHolder(width: CGFloat, height: CGFloat){
    var firstPlaceHolderPosition: CGFloat = 0;

    UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 0)

    let context = UIGraphicsGetCurrentContext()
    let rectangle = CGRect(x: 0, y: 0, width: width, height: height)

    CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
    CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor)
    CGContextSetLineWidth(context, 1)

    CGContextAddRect(context, rectangle)
    CGContextDrawPath(context, .FillStroke)

    let img = UIGraphicsGetImageFromCurrentImageContext()

    let tap = UITapGestureRecognizer(target: self, action: "doubleTapped:")

    tap.numberOfTapsRequired = 2


    for i in 1...4 {
        let imageView = StompUIImageView(frame: CGRect(x: firstPlaceHolderPosition, y: 0, width: width, height: height))

        imageView.image = img
        imageView.addGestureRecognizer(tap)
        imageView.userInteractionEnabled = true
        imageView.stompID = String(i)
        imageView.stompSlot = i

        addSubview(imageView)

        firstPlaceHolderPosition = firstPlaceHolderPosition + width + 10

        UIGraphicsEndImageContext()
    }
}

func doubleTapped(sender: UITapGestureRecognizer) {
    let view = sender.view as! StompUIImageView
    print(view.stompID)
}

我的代码很好地回答了我自己的问题。 问题是这一行:addSubview(imageView)

我将 4 个占位符(大约 300 像素)添加到一个小于所有占位符宽度总和的容器中。 虽然我看到所有的占位符都正确显示,但框架不够大,无法容纳它们,因此无法识别双击。 把容器变大解决了这个问题。