【问题标题】:No method declared with Objective c selector 'scale'没有使用 Objective c 选择器'scale'声明的方法
【发布时间】:2016-04-19 05:19:10
【问题描述】:

我目前正在关注关于 iOS 开发的斯坦福讲座。我想创建一个可以放大或缩小笑脸大小的捏合手势。这是原始代码:

faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: "scale:"))

但是,Xcode 抱怨说“no method declared with Objective c selector 'scale'”。

我按照它的建议替换了"scale:" with Selector("scale:"),但它仍然显示相同的错误消息。

我在网上查了一下,发现从swift 2.2开始,selector的语法变成了#selector(MyClass.methodName),所以我把这行代码改成了

faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(FaceView.scale)))

这次没有显示错误信息,但是当我运行项目并尝试在模拟器中放大或缩小笑脸时,它根本没有改变大小。

【问题讨论】:

  • 我认为 scale: function 中有参数...所以 swift 2.2 语法将是 #selector(FaceView.scale(_:))
  • 我已将 _: 添加到选择器,但捏仍然不起作用。对不起,如果我的问题对你来说听起来很傻,我只是这方面的初学者。你能想到其他的可能性吗?再次感谢您的帮助!
  • 这没什么好傻的...现在用断点检查...方法是否被调用
  • 我认为该方法已被调用。我再次运行该项目,发生了一些奇怪的事情。当我捏、放大和释放鼠标时,笑脸的大小没有改变。但是之后,如果我按下鼠标并向上或向下拖动,笑脸会突然变大。我认为捏是有效的,只是模拟器在捏过程中没有显示大小的变化。令人费解……

标签: ios swift view controller selector


【解决方案1】:

似乎自上次发布以来发生了一些变化。

建议您使用 #selector(MyClass.methodName) 如文档所示,这是正确的语法

在你的斯坦福讲座中,你在 View 上有一个名为 FaceView 的类,它有一个名为 scale 的方法。

所以 MyClass 是 FaceView,选择器是 #selector(FaceView.scale)

最后一行将是 faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(FaceView.scale)))

希望对你有所帮助,我也遇到了同样的问题 ;)

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 2016-07-21
    • 1970-01-01
    • 2015-06-10
    • 2013-02-04
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多