使用UIPanGesture时,无法识别的选择器发送到实例

时间:2015-12-23 22:32:49

标签: swift2 uigesturerecognizer uipangesturerecognizer xcode7.1

您好我正在尝试将UIPanGestureRecognizer添加到UIImageView(在我的情况下,它是一个表情符号)。所有其他UIGestureRecognizer,如长按,旋转和捏合都很好。但是,它给了我一个错误:当我添加UIPanGestureRecognizer时发送到实例的无法识别的选择器。我花了一天时间试图找出原因但未能解决问题。请帮忙!提前致谢。

这是我将UIGestureRecognizer添加到贴纸

的功能
  func emojiInsert(imageName: String) {

    deleteButtonHides()

    let stickerView: UIImageView = UIImageView(frame: CGRectMake(backgroundImage.frame.width/2 - 50, backgroundImage.frame.height/2 - 50, stickerSize, stickerSize))
    stickerView.image = UIImage(named: imageName)
    stickerView.userInteractionEnabled = true
    stickerView.accessibilityIdentifier = "sticker"

    let deleteStickerButton: UIImageView = UIImageView(frame: CGRectMake(stickerView.frame.width - 5 - stickerView.frame.width/3, 5, stickerView.frame.width/3, stickerView.frame.height/3))
    deleteStickerButton.image = UIImage(named: "button_back")
    deleteStickerButton.accessibilityIdentifier = "delete"
    deleteStickerButton.userInteractionEnabled = true
    deleteStickerButton.alpha = 0
    deleteStickerButton.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "deleteButtonTouches:"))
    stickerView.addSubview(deleteStickerButton)


    stickerView.addGestureRecognizer(UIPinchGestureRecognizer(target: self, action: "handlePinch:"))
    stickerView.addGestureRecognizer(UIRotationGestureRecognizer(target: self, action: "handleRotate:"))
    stickerView.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: "handleLongPress:"))
    stickerView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "handlePan"))

    print("emojiInsert : \(imageName)")

    backgroundImage.addSubview(stickerView)
}

下面是我在view.swift末尾添加的回调函数。我使用touchesbegan和touchesMoved拖动表情符号,但表情符号在旋转后以奇怪的方式移动。所以现在我正在尝试使用UIPanGesture来拖动一个表情符号。

    @IBAction func handlePinch(recognizer : UIPinchGestureRecognizer) {
    if(deleteMode) {
        return
    }
    print("handlePinch \(recognizer.scale)")

    if let view = recognizer.view {
        view.transform = CGAffineTransformScale(view.transform,
            recognizer.scale, recognizer.scale)
        recognizer.scale = 1
    }
}

@IBAction func handleRotate(recognizer : UIRotationGestureRecognizer) {
    if(deleteMode) {
        return
    }
    if let view = recognizer.view {
        view.transform = CGAffineTransformRotate(view.transform, recognizer.rotation)
        recognizer.rotation = 0
    }
}


@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
    if(deleteMode) {
        return
    }

    let translation = recognizer.translationInView(self.view)
    if let view = recognizer.view {
        view.center = CGPoint(x:view.center.x + translation.x,
            y:view.center.y + translation.y)
    }
    recognizer.setTranslation(CGPointZero, inView: self.view)
}


@IBAction func handleLongPress(recognizer: UILongPressGestureRecognizer) {
    if(recognizer.state == UIGestureRecognizerState.Began) {
        if(!deleteMode) {
            print("LongPress - Delete Shows")
            for (_, stickers) in self.backgroundImage.subviews.enumerate() {
                for (_, deleteButtons) in stickers.subviews.enumerate() {
                    if let delete:UIImageView = deleteButtons as? UIImageView{
                        if(delete.accessibilityIdentifier == "delete") {
                            delete.alpha = 1
                        }
                    }
                }
            }
            deleteMode = true
        } else {
            deleteButtonHides()
        }
    }
}

再次,请帮忙!提前致谢。

1 个答案:

答案 0 :(得分:1)

问题是你错过了冒号。在以下行中:

stickerView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "handlePan"))

handlePan应为handlePan:。这是因为您的方法的Objective-C签名是:

- (void)handlePan:(UIPanGestureRecognizer *)recognizer

冒号是方法名称的一部分。