簡體   English   中英

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個占位符(大約300px)。 雖然我看到所有占位符都正確顯示,但框架不夠大,無法容納它們,因此無法識別雙擊。 使容器更大化解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM