Tells that the region just changed from MapView

我在開發某 iPhone app project 期間,當時 version 0.5 還沒有實作很多功能,有邀請了年輕的朋友 Bill 來體驗我們的 app,協助 Usability test。我跟 Bill 說明此 app 設計的目的,並且給他我的 iPhone 操作,題目是從手機上瀏覽商品搭配地圖使用與操作。而 Bill 在操作時候,我在旁邊靜靜的觀察。Bill 對於這套 app 很好奇,會切換到地圖上瀏覽,會觸控移動地圖看看效果,並且點選商品進去看詳細資料。

事後我的紀錄整理,在開發沒做完的功能會誤按到,所以 Usability test 過程會遭遇卡卡的。但是對於已經開發的地方尚可。商品在相簿瀏覽等待網路傳輸 Loading 會很久,造成使用者沒有耐心往下看。另外我在觀察有帶來新的發現:使用者希望移動地圖的同時,可以插入更多針,顯示更多的商品。這功能可以讓我們的 app 帶來很不錯的體驗,是我們在開發時候未曾發現的,這也是我們本次 Usability test 最大的收穫。

回到 iPhone app project,我開始思索如何來實作這個部份。想當然兒應該會從 MapView 著手研究,我查詢了 iOS Library document 發現有一個 Method 可以幫助我們。
mapView:regionDidChangeAnimated:
Tells the delegate that the region displayed by the map view just changed.

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
Parameters: mapView, The map view whose visible region changed. animated, If YES, the change to the new region was animated.

Discussion
This method is called whenever the currently displayed map region changes. During scrolling, this method may be called many times to report updates to the map position. Therefore, your implementation of this method should be as lightweight as possible to avoid affecting scrolling performance.

Availability
Available in iOS 3.0 and later.

Declared In
MKMapView.h
將這個 delegate method 導入到我們開發時候,要注意並且 lightweight 方式來使用,避免地圖在移動的時候拼命的運算我們要的邏輯,像是透過網路跟 Server 查詢更多商品來顯示。所以我在實作邏輯規劃是,透過參數 mapView 得知使用者地圖中心的經緯度,去扣掉上次的經緯度算出使用者觸控地圖移動的距離是否足夠讓我們跟 Server 查詢更多商品,並且更新地圖坐標作為下次移動參考前次所需。在呼叫商品網路傳輸同時,我們會在地圖上顯示 Activity indicator 讓使用者請稍候。等查詢 Server 的 delegate method 回來時候,再把 Activity indicator 關閉停止顯示即可。


以上透過 Usability test 來找出使用者會需要的功能,介由讓使用者便利為目標,帶回到我們程式開發上來實作,這樣的 User-centered design 感覺可以讓我們知道,我們寫出的新功能是可以帶來不錯的效益。有興趣不仿參考 MKMapViewDelegate Protocol Reference

Comments