swift - 无法识别的选择器发送到实例 - XCode 9.4.1,Swift 4.0
问题描述
我正在学习 2016 年的斯坦福 Swift 课程 iOS9,并且在复制 UIPinchGestureRecognizer 时遇到了问题,对 Selector 代码语法感到非常困惑。
FaceViewConroller.Swift 中的 FaceViewController 类内部:
@IBOutlet weak var faceView: FaceView! {
didSet {
faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: self, action: #selector(changeScale(_:))))
updateUI()
}
}
FaceView.Swift 中 Faceview 的内部类定义:
@objc
func changeScale(_ recognizer: UIPinchGestureRecognizer) {
switch recognizer.state {
case .changed,.ended:
scale *= recognizer.scale
recognizer.scale = 1.0
default:
break
}
}
它构建时没有错误(需要一段时间),但是当它运行捏合手势时会导致错误:
Faceit.FaceViewController changeScale:]: 无法识别的选择器发送到实例
谢谢。
解决方案
您传递了错误的target
参数。
由于您要调用的方法 ( changeScale
) 是在 中声明的FaceView
,因此目标应该是 的实例FaceView
,而不是FaceViewController
,因为FaceViewController
没有changeScale
方法。
所以:
faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(changeScale(_:))))
推荐阅读
- python - 将 np.array 二进制转换为单个二进制数
- amazon-web-services - 如何知道 s3 put-object 请求的签名 URL 已被使用并且文件已完全上传?
- css - 一张图片包含 4 张图片的 Css 动画
- python - 使用 django 提供的登录视图而不是自定义登录视图
- python - django如何为ForeignKey使用过滤器
- python - 自定义 Base64 编码器无法正确编码
- python - 请求获取与浏览器不同的数据
- python - POSTGRESQL 和 Django 应用程序:无法从客户端接收数据:对等方重置连接
- c# - 如何根据在c#中调用另一个方法来停止执行一个方法
- wordpress - wordpress 文件无法在 Mozilla 上下载