簡體   English   中英

Swift 2:UIPinchGestureRecognizer中的選擇器:如何從另一個類訪問func

[英]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.

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