我有一個帶有一些註釋的MKMapView。現在,每當區域發生變化時,我都會加載新的註釋。這可以正常工作,但是如果某些註記位於地圖視圖的邊界附近並點擊它,註釋信息窗口會彈出並且mkmapview區域會稍微移動一點(以便它可以很好地顯示窗口),但問題是還調用了regionDidChangeAnimated,它重新加載了所有的註釋,當然隱藏了信息窗口。
我知道您可以在重新加載時再次點擊註釋,但對於用戶而言,它似乎已損壞,並且當您不需要時也可以重新加載註釋。
有什麼辦法來檢查regionDidChangeAnimated是因用戶操作還是以編程方式調用?
謝謝。MKMapView regionDidChangeAnimated由用戶操作或程序調用
2
A
回答
5
當鄰近地圖視圖邊緣的註釋被分接,並將其移動地圖,以適應標註,事件的序列是:
regionWillChangeAnimated
稱爲didSelectAnnotationView
稱爲regionDidChangeAnimated
是
使用兩個BOOL
ivar標誌,您可以觀察此序列並防止在0123中重新加載註釋。
例如:
-(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
regionWillChangeAnimatedCalled = YES;
regionChangedBecauseAnnotationSelected = NO;
}
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
regionChangedBecauseAnnotationSelected = regionWillChangeAnimatedCalled;
}
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
if (!regionChangedBecauseAnnotationSelected) //note "!" in front
{
//reload (add/remove) annotations here...
}
//reset flags...
regionWillChangeAnimatedCalled = NO;
regionChangedBecauseAnnotationSelected = NO;
}
1
您刪除所有註釋並在regionDidChangeAnimated
方法中添加新註釋?我認爲更強大的解決方案是跟蹤使用字典和某個唯一標識符作爲關鍵字(不會更改,數據庫ID等)添加到映射中的所有註釋。然後,在您的regionDidChangeAnimated
方法中,您只能添加實際上新的,也可能刪除區域外的註釋。
0
您可能會發現這是一個更好的體驗,以配合載入你的新註釋到UIGestureRecognizer,所以你只加載新的,當你知道一個事實,即用戶擁有手動滾動地圖。這也可以防止設備旋轉時重新加載。請參閱Jano在determine if MKMapView was dragged/moved的回答。
相關問題
- 1. MKMapView沒有在Pan上調用regionDidChangeAnimated
- 2. MKMapView regionDidChangeAnimated不總是被調用!
- 3. 在MKMapview中使用NSAutoreleasepool時應用程序崩潰regionDidChangeAnimated方法
- 4. 的MKMapView委託:regionDidChangeAnimated和mapViewDidFinishLoadingMap
- 5. multiple regionDidChangeAnimated調用 - 什麼給?
- 6. regionDidChangeAnimated不工作
- 7. 程序是由用戶或調度程序啓動的?
- 8. 的iOS的MKMapView regionDidChangeAnimated visibleMapRect問題
- 9. 程序不調用重載操作
- 10. 由於線程退出或應用程序而導致I/O操作中止
- 11. Android:阻止用戶啓動應用程序或使用操作系統
- 12. 如何以編程方式通知代碼或用戶操作調用了IBAction
- 13. Android操作系統 - 阻止用戶關閉應用程序或使用任何操作系統功能
- 14. ASP.NET MVC:僅由其他操作調用的操作
- 15. 用戶上的MKMapView
- 16. 由於MKMapView應用程序經常在pushViewController和PopviewController上崩潰?
- 17. mkMapView的regionDidChangeAnimated委託觸發了兩次標籤加載
- 18. 在使用GUI /應用程序時預測用戶操作
- 19. UIButton操作不使用UITapGestureRecognizer iphone應用程序調用?
- 20. 由python程序調用的打印程序(或程序文件路徑)
- 21. Java的Web應用程序 - 由用戶
- 22. 是否由用戶啓用Exchange ActiveSync?設備?設備類型或操作系統?
- 23. 跟蹤用戶操作 - 應用程序分析
- 24. 在一頁中授權用戶的操作javascript應用程序
- 25. 沒有用戶操作的Dropbox API,獨立應用程序
- 26. (#200)用戶尚未授權應用程序執行此操作
- 27. iOS - Facebook應用程序測試用戶 - 發佈操作
- 28. Web應用程序用戶操作日誌記錄
- 29. OAuthException:(#200)用戶未授權應用程序執行此操作
- 30. 如何在winforms應用程序中記錄用戶操作
好主意,我沒有想到檢查didSelectAnnotationView方法,我會試試看,謝謝! :) – haluzak