[英]Swift 2: Selector in UIPinchGestureRecognizer: How to access func from another class
我正在Swift和構建應用程序上這節課。
視頻中的43:30,講師教您如何設置UIPinchGestureRecognizer
,該UIPinchGestureRecognizer
從其Selector中的另一個文件中獲取功能。
這是教師使用的代碼:
@IBOutlet weak var faceView: FaceView! {
didSet {
faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: #selector(FaceView.changeScale(_:))))
updateUI()
}
}
我收到2個錯誤:
表達式列表中的期望表達式,
和:
預期為','分隔符。
我嘗試將#selector
更改為Selector
,但沒有運氣。
函數changeScale
:
func changeScale(recognizer: UIPinchGestureRecognizer)
{
switch recognizer.state {
case .Changed, .Ended:
scale *= recognizer.scale //scale is the displayed image scale
recognizer.scale = 1.0
default:
break
}
如果我將Selector
參數用引號引起來,則在我捏住應用程序時會崩潰,並出現以下錯誤:
無法識別的選擇器已發送到實例。
我正在MacBook Air(Ver 100.11.6)上運行Xcode 8.1(8B62)和iPhone 5模擬器
這是我使用的代碼
faceView.addGestureRecognizer(UIPinchGestureRecognizer(target:faceView,
action:#selector(FaceView.changeScale(recognizer:))))
捏臉時,請確保單擊“選項+鼠標左鍵+移動”。 我犯了一個錯誤,那就是只按“ Option + Movement on mousepad”,它不起作用。
希望能幫助到你。
從上面的注釋中可以看出,Xcode版本是7.2,並且#selector
語法是在Xcode 7.3中引入的,因此在這里不可用。 這只是意味着您應該能夠使用“舊的” Selector
語法。
所不同的是,您只需要給函數傳遞一個帶有函數名稱的字符串,然后傳遞給函數Selector
需要的每個參數:
。 您需要一個參數( recognizer
),因此在您的情況下,字符串如下所示:
"changeScale:"
因此,您將使用:
Selector("changeScale:")
結果是:
@IBOutlet weak var faceView: FaceView! {
didSet {
faceView.addGestureRecognizer(UIPinchGestureRecognizer(target: faceView, action: Selector("changeScale:")))
}
}
如您所見,這容易出錯...一個錯字和kaboom! 這就是為什么新的#selector
語法是一個很好的改進的原因...對不起...不打算嘗試使用它。
希望這對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.