《iPad开发从入门到精通》——6.5节地图信息

    xiaoxiao2023-12-14  211

    本节书摘来自异步社区《iPad开发从入门到精通》一书中的第6章,第6.5节地图信息,作者 杨春泽,更多章节内容可以访问云栖社区“异步社区”公众号查看

    6.5 地图信息iPad开发从入门到精通通过此功能,可以在地图中查看某条公交线路的信息,这样更具有直观性,大大地方便了用户的浏览。本系统可以分为如下3种显示地图的样式。Standard。Statellite。Hybird。除此之外,还提供了网页地图功能。

    6.5.1 地图主视图地图主视图CBus_MapView.xib的UI界面效果如图6-11所示。在上方显示3个选项卡,在下方显示了地图信息。

    实现文件 CBus_MapViewController.m的主要代码如下所示。

    #import "CBus_MapViewController.h" #import "CBus_WebMapViewController.h" #import "CDataContainer.h" @implementation CBus_MapViewController @synthesize cityMapView,mapStyleSegCtr,mapNavigationBar; @synthesize webMapViewController; - (void)dealloc{   [super dealloc];   [cityMapView release];   [mapStyleSegCtr release];   [mapNavigationBar release];   [webMapViewController release]; } - (void)didReceiveMemoryWarning{   // 释放视图   [super didReceiveMemoryWarning]; } #pragma mark - View lifecycle - (void)viewDidLoad{   [super viewDidLoad];   UIBarButtonItem *webMapButton = [[UIBarButtonItem alloc]                   initWithTitle:@"WebMap"                   style:UIBarButtonItemStyleBordered                   target:self                   action:@selector(goToWebMap:)];   self.navigationItem.rightBarButtonItem = webMapButton;   [webMapButton release];   CLLocationManager *locationMananger = [[CLLocationManager alloc] init];   locationMananger.delegate = self;   locationMananger.desiredAccuracy = kCLLocationAccuracyBest;   locationMananger.distanceFilter = 1000.0;   [locationMananger startUpdatingHeading];   MKCoordinateSpan theSpan;   theSpan.latitudeDelta = 0.05;   theSpan.longitudeDelta = 0.05;   MKCoordinateRegion theRegion;   theRegion.center = [[locationMananger location]coordinate];   theRegion.span = theSpan;   [cityMapView setRegion:theRegion];   [locationMananger release]; } - (IBAction) OnSegmentIndexChanged:(id)sender{   if ([sender selectedSegmentIndex] == 0){     NSLog(@"--------------OnSegmentIndexChanged1-------");     cityMapView.mapType = MKMapTypeStandard;   }   else if([sender selectedSegmentIndex] == 1){     NSLog(@"--------------OnSegmentIndexChanged2-------");     cityMapView.mapType = MKMapTypeSatellite;   }   else if([sender selectedSegmentIndex] == 2){     NSLog(@"--------------OnSegmentIndexChanged3-------");     cityMapView.mapType = MKMapTypeHybrid;   } } - (void)viewWillAppear:(BOOL)animated{   [super viewWillAppear:animated];   NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];   NSInteger styleNum = [userDefault integerForKey:@"styleType"];   switch (styleNum) {     case 0:{       [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;       self.navigationController.navigationBar.barStyle = UIBarStyleDefault;       self.mapStyleSegCtr.tintColor = [UIColor colorWithRed:0.48  green: 0.56 blue:0.66 alpha:1.0];       self.mapNavigationBar.barStyle = UIBarStyleDefault;       break;     }     case 1:{       [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyle BlackOpaque;       self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;       self.mapStyleSegCtr.tintColor = [UIColor darkGrayColor];       self.mapNavigationBar.barStyle = UIBarStyleBlackOpaque;       break;     }   } } - (IBAction)goToWebMap:(id)sender {   CBus_WebMapViewController *theController = [[CBus_WebMapViewController alloc] initWithNibName:@"CBus_WebMapView" bundle:nil];   self.webMapViewController = theController;   [UIView beginAnimations:@"View Flip" context:nil];   [UIView setAnimationDuration:1.0];   [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];   [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView: self.navigationController.view cache:NO];   [self.navigationController pushViewController:webMapViewController animated:YES];   [UIView commitAnimations];   [theController release]; } - (void)viewDidUnload{   [super viewDidUnload];   } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation{   // Return YES for supported orientations   return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end

    执行效果如图6-12所示。

    6.5.2 Web地图视图为了便于用户详细浏览公交路线,本项目还提供了Web地图功能,CBus_WebMapView.xibUI界面效果如图6-13所示。

    实现文件CBus_WebMapViewController.m的主要代码如下所示。

    #import "CBus_WebMapViewController.h" @implementation CBus_WebMapViewController @synthesize myWenView; // 视图初始化 - (void)viewDidLoad {   [super viewDidLoad];     self.navigationItem.hidesBackButton = YES;   UIBarButtonItem *mapButton = [[UIBarButtonItem alloc]        initWithTitle:@"Map"          style:UIBarButtonItemStyleBordered      target:self action:@selector(goToMap:)];     self.navigationItem.rightBarButtonItem = mapButton;     NSMutableString *googleSearch = [NSMutableString stringWithFormat:@"http://ditu. google.cn/maps?f=d&source=s_d&saddr='西安市火车站'&daddr='西安市钟楼'&hl=zh&t=m&dirflg=h"];   [myWenView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[google Search stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];   [mapButton release]; } - (IBAction) goToMap:(id)sender {   [UIView beginAnimations:@"View Flip" context:nil];   [UIView setAnimationDuration:1.0];   [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];   [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self. navigationController.view cache:NO];   [self.navigationController popViewControllerAnimated:NO];   [UIView commitAnimations]; } - (void)viewWillAppear:(BOOL)animated{   [super viewWillAppear:animated];   NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];   NSInteger styleNum = [userDefault integerForKey:@"styleType"];   switch (styleNum) {     case 0:{       [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;       self.navigationController.navigationBar.barStyle = UIBarStyleDefault;       break;     }     case 1:{       [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyle BlackOpaque;       self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;       break;     }   } } - (void)didReceiveMemoryWarning {   // 释放视图   [super didReceiveMemoryWarning]; } - (void)viewDidUnload {   [super viewDidUnload];   self.myWenView=nil; } - (void)dealloc {   [super dealloc];   [self.myWenView release]; } @end

    执行效果如图6-14所示。

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)