iOS 6苹果地图应用(MapKit)-内置开发

news/2024/11/20 11:32:06/

原始地址:iOS 6苹果地图应用(MapKit)-内置开发

本文是苹果案例RegionDefiner的注释。

#import "ViewController.h"
#import "MyAnnotation.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.mainMapView = [[MKMapView alloc] init];
self.mainMapView.delegate = self;
[self.mainMapView setUserInteractionEnabled: YES];
[self.mainMapView setScrollEnabled: YES];
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
[toolbar sizeToFit];
CGSize containerSize = self.view.bounds.size;
CGSize toolbarSize = toolbar.bounds.size;
UIBarButtonItem *resetButton = [[UIBarButtonItem alloc] initWithTitle:@"Reset"
style: UIBarButtonItemStyleBordered
target: self
action: @selector(removePins)];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithTitle: @"Log"
style: UIBarButtonItemStyleBordered
target: self
action: @selector(tappedShare)];
toolbar.frame = CGRectMake(0, containerSize.height - toolbarSize.height, containerSize.width, toolbarSize.height);
self.mainMapView.frame = CGRectMake(0, 0, containerSize.width, containerSize.height - toolbarSize.height);
[self.view addSubview:self.mainMapView];
[self.view addSubview:toolbar];
//工具条上添加"重置按钮","空白","日志按钮"
[toolbar setItems:@[ resetButton, flexibleSpace, share ]];
[self setUpGesture];
self.itemsArray = [[NSMutableArray alloc] init];
}
- (void)viewDidUnload
{
[self setMainMapView:nil];
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
#pragma mark -
#pragma mark Dropping pins
//添加长按手势
- (void)setUpGesture
{
self.longPress = [[UILongPressGestureRecognizer alloc] initWithTarget: self
action: @selector(handleLongPress:)];
self.longPress.delegate = self;
[self.view addGestureRecognizer:self.longPress];
}
//处理长按手势
- (void)handleLongPress:(UILongPressGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan)
{
CGPoint longPressPoint = [recognizer locationInView:self.view];
//在此点绘制大头针
[self dropPinAtPoint:longPressPoint];
}
}
- (void)updatePolygon
{
CLLocationCoordinate2D *points = malloc(sizeof(CLLocationCoordinate2D) * self.itemsArray.count);
NSUInteger i = 0;
for (MyAnnotation *pin in self.itemsArray)
{
//添加所有坐标的经纬度
points[i] = pin.coordinate;
i++;
}
//清除地图上上次绘制的图形
[self.mainMapView removeOverlay:self.polygon];
//绘制多边形
self.polygon = [MKPolygon polygonWithCoordinates:points count:self.itemsArray.count];
[self.mainMapView addOverlay:self.polygon];
}
- (void) dropPinAtPoint: (CGPoint) pointToConvert
{
//把视图上的点转换成经纬度
CLLocationCoordinate2D convertedPoint = [self.mainMapView convertPoint: pointToConvert toCoordinateFromView: self.view];
//大头针的标题
NSString *pinTitle = [NSString stringWithFormat: @"Pin number %i", self.itemsArray.count];
//大头针的子标题,显示经纬度
NSString *subCoordinates = [NSString stringWithFormat: @"%f, %f", convertedPoint.latitude, convertedPoint.longitude];
MyAnnotation *droppedPin = [[MyAnnotation alloc] initWithCoordinate: convertedPoint title: pinTitle subtitle: subCoordinates];
//在地图上添加这个标记
[self.mainMapView addAnnotation:droppedPin];
//加入数组
[self.itemsArray addObject:droppedPin];
//更新多边形
[self updatePolygon];
}
- (void)removePins
{
//移除标记
[self.mainMapView removeAnnotations:self.mainMapView.annotations];
//重置
[self.itemsArray removeAllObjects];
//清除绘制的多边形
[self.mainMapView removeOverlay:self.polygon];
//更新多边形
[self updatePolygon];
}
#pragma mark - Output
//操作日志
- (void)tappedShare
{
NSLog(@"%@", [self coordinates]);
}
- (NSString *)coordinates
{
//绘制多边形至少需要三个点
if (self.itemsArray.count < 3)
{
return @"Minimum of 3 vertices requried to make polygon.";
}
NSString *masterString = @"\n{ \"type\": \"MultiPolygon\",\n \"coordinates\": [\n[[";
for (MyAnnotation *pin in self.itemsArray)
{
masterString = [masterString stringByAppendingFormat: @"[%f, %f],\n", pin.coordinate.longitude, pin.coordinate.latitude];
}
// GeoJSON requires that the first and last vertices be identical
MyAnnotation *firstPin = [self.itemsArray objectAtIndex:0];
masterString = [masterString stringByAppendingFormat: @"[%f, %f],\n", firstPin.coordinate.longitude, firstPin.coordinate.latitude];
masterString = [masterString stringByAppendingString: @"]]\n]\n}\n"];
masterString = [masterString stringByReplacingOccurrencesOfString: @"],\n]]" withString: @"]]]"];
return masterString;
}
#pragma mark - MKMapViewDelegate
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
if (self.polygonView && self.polygonView.polygon == self.polygon)
return self.polygonView;
self.polygonView = [[MKPolygonView alloc] initWithPolygon:self.polygon];
//填充色
self.polygonView.fillColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.3f];
//边界颜色
self.polygonView.strokeColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.9f];
//边线宽度
self.polygonView.lineWidth = 1.0f;
return self.polygonView;
}
@end



http://www.ppmy.cn/news/356326.html

相关文章

iOS 6苹果地图应用(MapKit)-打开外部应用(导航)

转载自&#xff1a;http://blog.csdn.net/shiyiyufen/article/details/8954038 也可参考这篇文章&#xff1a; http://www.verydemo.com/demo_c134_i6937.html 原始地址&#xff1a;iOS 6苹果地图应用&#xff08;MapKit&#xff09;&#xff0d;打开外部应用 在iOS 6中&…

用Canvas模拟苹果画图工具

该画图工具主要有以下几个功能&#xff1a; - 文件菜单中主要有保存、清除、撤销三个功能 - 画图菜单中主要有线条、圆形、矩形三个功能 - 颜色菜单 - 边框菜单中主要有3个线条 - 类型菜单中主要有实心和空心 - 编辑件菜单中主要有擦除、选择2个功能 先看下效果 HTML部分…

统计学中的「标准差和方差」

标准差(Standard deviation) 简单来说&#xff0c;标准差是一组数值自平均值分散程度的一种测量观念。一个较大的标准差&#xff0c;代表大部分的数值和其平均值之间差异较大&#xff0c;一个较小的标准差&#xff0c;代表这些数值较接近平均值。 例如&#xff1a; 两组数的集…

堡垒机、运维堡垒机、开源堡垒机、云堡垒机全面解析

一、概述 1.0、数据丢失危机1.1、面临的挑战二、堡垒机的概念和种类 2.0、网关型堡垒机2.1、运维审计型堡垒机2.1.1、主要功能三、主流堡垒机解决方案 3.0、使用开源堡垒机3.1、内部自研3.2、使用传统硬件堡垒机3.3、使用云堡垒机四、主流云堡垒机 4.0、云堡垒机的主要选购指标…

2022-2028年中国UTM市场投资分析及前景预测报告

【报告类型】产业研究 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了UTM行业相关概述、中国UTM行业运行环境、分析了中国UTM行业的现状、中国UTM行业竞争格局、对中国UTM行业做了重点企业…

前置:API:DSP:核心交换机:边界网关协议:边界:(防御)防火墙:负载均衡:摆渡机:名词解释

前置&#xff1a;API:DSP:核心交换机&#xff1a;边界网关协议&#xff1a;边界&#xff1a;&#xff08;防御&#xff09;防火墙&#xff1a;负载均衡&#xff1a;摆渡机&#xff1a;名词解释 前置&#xff1a; 前置&#xff0c;拼音qin zh&#xff0c;游戏术语&#xff0c;在…

防火墙和系统安全防护与优化

防火墙 防火墙(Firewall)&#xff0c;也称防护墙&#xff0c;是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网(US5606668(A)1993-12-15)。它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统&#xff0c;依照特定的规则&#xff0c;允许…

防火墙和系统安全防护和优化

** 防火墙 ** 防火墙(Firewall)&#xff0c;也称防护墙&#xff0c;是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网(US5606668(A)1993-12-15)。它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统&#xff0c;依照特定的规则&#xf…