2015-10-25 81 views
0

我想要使用locationInView來獲取觸摸的位置。當我將locationInView打印到控制檯時,會輸出正確的值。但是,當我嘗試並將其分配給本地變量時,該變量永遠不會獲取該值,因此我的代碼的其餘部分不起作用。另外,這是UIControl的一個子類。touch.locationInView不分配給本地變量

以下摘錄:

override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool 
{ 
    NSLog("\(touch.locationInView(self))")  // Prints out the correct location 
    let newPoint = touch.locationInView(self) // Never gets assigned to newPoint 
    var calculatedIndex: Int? 

    for (index, item) in labels.enumerate() { 
     if item.bounds.contains(newPoint) { 
      calculatedIndex = index 
     } 
    } 

    if calculatedIndex != nil { 
     selectedIndex = calculatedIndex! 
     sendActionsForControlEvents(.ValueChanged) 
    } 

    return false 
} 

Debugger and local variables
Debugger and local variables

+0

我懷疑實際發生了什麼,記錄/打印'newPoint'的輸出是什麼? – luk2302

+0

我添加了Xcode和調試器的本地和控制檯的快照,顯示發生了什麼。 – bryken

+0

Xcode調試器已知有相當多的錯誤,請在分配newPoint日誌newPoint後添加NSLog語句。 – luk2302

回答

0

我只是跑你的代碼在本地,它都能正常運作。您可能被調試器問題欺騙以顯示其價值。您可以通過打印newPoint來確認。至於爲什麼你的其他代碼沒有得到執行,我建議你檢查你的labels。我認爲labels.enumerate是失敗的,這使你覺得代碼沒有得到執行。再次嘗試打印值而不是依賴調試器。

+0

謝謝。我看到調試器失敗了。我也混淆了我的界限和框架,因此沒有像我預期的那樣正確選擇。在那裏扔了一對NSLog,並把它全部弄清楚了。 – bryken

+0

很好......我想這個必須被接受的答案。你能接受這一點爲了他人的利益嗎? – Abhinav