ArcGIS Runtime SDK for iOS開發系列教程(2)——MapViewDemo解析

首發地址:http://www.cnblogs.com/esrichina/archive/2012/09/01/2666647.html

     安裝完ArcGIS Runtime SDK for iOS後,系統會自帶一個支持ArcGIS Runtime SDK的項目MapViewDemo。路徑爲:${HOME}/Library/SDKs/ArcGIS/Samples/MapViewDemo

      打開MapViewDemo文件夾下的MapViewDemo.xcodeproj項目文件,可以在Xcode中看到項目文件結構如圖

                                                                                 圖1 MapViewDemo文件結構

下面我們來介紹下MapViewDemo中文件結構

1.ArcGIS.bundle(包)是一個內部結構按照標準規則組織的ArcGIS資源目錄(使用方法如:ArcGIS.bundle/GpsDisplay.png)。解壓後可以看到以下資源:

                                                                                圖2 ArcGIS.bundle包含的資源

其中Resources目錄是應用程序本地化的一些設置

                                                                        圖3 ArcGIS.bundle中用於應用程序本地化的資源

      其實,iOS的應用也都是通過bundle進行封裝的,只不過對應的bundle類型爲Application而已。Finder會把這個bundle當做一個文件顯示給我們,因爲這個bundle自身也是一個package,而Mac系統會把所有的package當做一個文件顯示給用戶,從而防止用戶誤操作導致程序文件損壞或丟失。

2.Classes文件夾,用來存放我們編寫的代碼,包括所有的Objective-C類,也可以通過創建子文件夾進行分類。該demo中包含兩個類:MapViewDemoViewController(視圖控制類)和MapViewDemoAppDelegate(應用程序代理類)。

      在每一個IOS應用程序都有一個實現UIApplicationDelegate協議的AppDelegate類,用來通過從iOS接收消息的方式來跟蹤應用程序的狀態變化。如,在開始的時候就運行– applicationDidFinishLaunching方法,在結束的時候運行– applicationWillTerminate方法。它還可以讓你確定什麼時候接電話,或者什麼時候內存將滿等。

3.Other Sources文件夾,用來存放Objective—C類之外的源代碼文件。通常,它包含了MapViewDemo_Prefix.pch和main.m文件。

      *.pch文件表示預編譯頭文件(precompiled header),包含了項目中所使用的來自外部框架的一組頭文件。Xcode會預編譯包含在此文件中的頭文件,以減少項目編譯時間。

      main.m文件包含應用程序的main()方法,一般不需要修改。

4.Resources文件夾,用來存放應用程序的非代碼文件。如:應用程序圖標文件、圖片資源、聲音影片資源、文本文件等。

      由於IOS應用程序在自己的沙盒中運行,因此需要將應用程序所需的文件資源保存在此處。

      MapViewDemoViewController.xib文件是應用程序的界面視圖文件,可以使用Interface Builder(用於應用程序界面設計的工具)進行編輯,如拖放控件等。

      MainWindow.xib是應用程序界面構建的主文件,默認不需要修改。

      MapViewDemo-Info.plist包含應用程序相關配置信息的屬性列表。

      Resources-iPad是構建iPad設備應用界面所需的文件。

5.Frameworks,是應用程序需要使用到的框架或者庫文件。可以包含代碼、圖像、聲音文件等資源,5中框出來的框架和庫就是MapViewDemo這個項目需要用的框架和庫文件。

      其中*.a爲靜態庫、*.dylib爲動態庫。

      該文件夾下添加的任何框架和庫都將連鏈接到應用程序中,並且代碼將能夠使用包含在該框架或者庫中的對象、函數和資源。

6.Products,存放項目編譯時生成的應用程序。

      MapViewDemo.app是該項目的唯一產品,紅色表明無法找到該文件,需要連接設備編譯

以上就是MapViewDemo這個項目包含的文件以及他們的作用,下面我們運行看看效果,在虛擬機中使用window鍵+R運行項目,效果如下圖

        接下來,我們來看MapViewDemo中的代碼部分

        每一個Objective-C類都包含兩部分,類聲明(*.h)和類實現(*.m)

        其中,應用程序代理類MapViewDemoAppDelegate的聲明如下:

       Objective-C中使用@interface和@end關鍵字來聲明一個類,以上MapViewDemoAppDelegate類是一個實現了實現UIApplicationDelegate協議的NSObject類,並定義了用於界面構建的輸出口UIWindow和視圖控制器MapViewDemoViewController。

       #import表示頭文件包含,IBOutlet是輸出口關鍵字,retain、nonatomic跟內存管理相關。

       關於Objective-C的語法後面專門來講,大家也可以參考網絡上關於Objective-C的資源。     

       MapViewDemoAppDelegate的實現

      Objective-C中使用@implementation和@end關鍵字來實現一個類。

      @synthesize關鍵字類似於對象的setter,getter 方法。

      在應用程序入口applicationDidFinishLauching函數中,實現界面創建,使用addSubView的方法將視圖控制器中的界面元素添加到視圖中並設置顯示。

      dealloc用於應用程序關閉時對象銷燬。

      視圖控制器類的聲明

       MapViewDemoViewController:UIViewController<AGSMapViewLayerDelegate>{}表明MapViewDemoViewController是繼承與視圖控制類,並實現了AGSMapViewLayerDelegate協議。AGSMapView、AGSDynamicMapServiceLayer等就是ArcGIS Runtime SDK提供的用於訪問ArcGIS的GIS功能的Objective-C類,類似於Flex等其他平臺的API的對象。

       Objective-C中使用IBAction來聲明一個方法。

       -(IBAction)opacitySliderValueChanged(id)sender;是MapViewDemoViewController類的一個方法,用於拖動滑塊改變動態圖層的透明度。

       視圖控制器類實現

         如果你使用過基於REST接口的ArcGIS API,是不是感覺非常熟悉呢,在IOS中這個接口的使用都是類似。

         我們不難理解,在視圖創建完成後應用程序完成了切片圖層的初始化、動態圖層初始化以及在視圖中加載、投影、顯示範圍設置等操作。

         -(IBAction) opacitySliderValueChanged:(id)sender{self.dynamicLayerView.alpha=((UISlider *)sende).value;}用於實現拖動滑塊改變圖層透明度的操作

         -(void) mapViewDidLoad:(AGSMapView*)mapView{[self.mapview.gps.start];} 用於實現AGSMapViewLayerDelegate協議中的mapViewDidLoad:方法,作用就是在地圖加載完成後,開啓ArcGIS Runtime SDK自帶的GPS定位功能。

        總結:本講主要向大家介紹ArcGIS Runtime SDK for iOS自帶例子的文件結構與代碼邏輯,下一講我們將給大介紹Objective-C語法基礎,歡迎大家繼續關注!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章