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

      安装完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语法基础,欢迎大家继续关注!

posted @ 2012-09-01 14:44  esrixa  阅读(3197)  评论(0编辑  收藏  举报