2013-11-28 20 views
0

我在使用UIAlertViews時遇到了一些問題,這些UIAlertViews在進入信標範圍時想顯示給用戶。我希望僅在距離信標達到一定距離時出現UIAlertview。首先,我考慮在「didrangebeacons」委託方法中解僱Alertview。但是這會每秒觸發AlertView一次。然後我認爲我應該在didEnterRegion中做到這一點,但一旦用戶在範圍內(可能20米遠),它就會被解僱。iBeacon應該提供一個AlertView

正確實施的最佳做法是什麼?我想到了一個我會設置的旗幟。例如:創建一個名爲「showAlert」的標誌並在DidEnterRegion委託方法中將其初始設置爲「YES」。一旦達到某個RSSI,我就會出現警報視圖並在此之後將其設置爲NO。一旦燈塔區域退出,我將被重新設置爲YES。

這是「正確」的方式嗎?

謝謝!

回答

1

在您的didRangeBeacons方法中,我將檢查CLBeacon對象和/或RSSI的準確性屬性,以確定信標是否足夠接近。

準確性是一個以米爲單位的估計值,可能比使用RSSI更適合您,儘管我可以想象它們之間的兼容性。

然後,我會將您的標誌設置爲已顯示警報並顯示警報的狀態。在委託方法「didExitRegion」中,我會重置該標誌,以便您準備好在您返回該區域時再次收到通知。

+0

實際解決。謝謝! – sesc360

3

您只能在didRangeBeacons方法中獲得距離信息。在該方法中,您將獲得一系列信標。如果陣列中存在多個信標,則需要決定如何處理。我所做的是循環並找到最接近的燈塔(基於精確度讀數,這實際上是大致的距離)

您將有時會調用一個空信標陣列,或者所有信標顯示未知和/或準確度值爲-1。你需要確保你處理這些情況。

此外,如果你在後臺,事情會搞砸。在這種情況下,當你輸入一個信標範圍時,你會得到一個didEnterRegion呼叫,然後進行一些測距呼叫(基於我的測試約5秒鐘)。之後,測距呼叫停止,除非你停止用戶將您的應用程序返回到前臺。如果您在後臺運行並忽略前幾個測距呼叫,因爲用戶距離不夠近,當用戶靠得更近時,您將永遠不會收到通知。

+0

好信息!所以我需要使用didRangeBeacons方法來獲得距離我正在測距的信標......但是我應該在哪裏啓動AlertView,以及如何處理僅顯示一次的情況?正如我提到的:當我在didRangeBeacons方法中執行此操作時,我將每秒發出一次警報視圖。有什麼最佳做法嗎?你會如何照顧背景問題?我需要確保用戶在他處於信標範圍內時得到通知,即使應用程序未加載 – sesc360

+1

@ISARFAKTOR,您需要繪製出您想要發生的事情,然後拿出實現該功能的代碼邏輯。正如另一張海報所說,你可能需要一個布爾型的「alertShown」標誌。就背景操作而言,似乎存在一些嚴格的限制。如果您從後臺運行,則無法忽略遠程調用的呼叫,並希望在用戶靠近時再次呼叫。它不起作用。 –

相關問題