新普金娱乐网址


地理答啦:有卧牛城之称的上饶,是郭守敬尚小云王宝强(英文名:wáng bǎo qiáng)的本土,说说那座都市的杰出韵致

壹路向前出行中夏族民共和国

iOS学习笔记(地理9)-地图Map基特入门

  • 三月 08, 2019
  • 地理
  • 没有评论

说到H5C3会不会认为东西重重啊,明日就整治了一份计算性的剧情;

那篇文章如故翻译自raywenderlich,用Objective-C改写了代码。没有逐字翻译,如有错漏,请提出。原来的小说地址在这里

地理 1

1 概述

MapKit是iOS提供的一个很省心的API,目的在于帮衬我们急忙支付地理地方相关的运用。在那篇博客中涉嫌的地点叫Honolulu,是花旗国的贰个城池,中文名是檀香山,是美利坚同盟国塞舌尔州省城和港口城市。小编先是次听别人说檀香山应当是在历史书上,就好像跟孙伯明翰先生相关,那里近期按下不表。

正文的例子中大家要添加二个地图到APP中,然后经过经纬度定位到八个点名的地点,通过大头针的花样来显示定位,点击大头针会彰显地点的一些新闻。大家能够安装大头针的颜料,当然大家更能够自定义图片来替换私下认可的大头针,丰盛地图内容。

CSS3采用器有啥?
答:属性选用器、伪类选择器、伪元素选取器。
CSS3新特色有啥样?
答:1.颜色:新增RGBA,HSLA模式

2 开始

第①新建工程,命名为Map基特Tutorial,然后添加一个Map KitView到Storyboard中。先拖拽地图视图到充满显示器,然后接纳丰富提出的自律即可,添加完约束效率如图1所示。

图1 添加 Map Kit View

下一场要求在ViewController.m中添加Map
View的outlet关联,通过CT帕杰罗L+DRAG即可,命名为mapView,代码如下,别忘记引入MapKit头文件,注意要初叶入Map基特库(Xcode7.3里面,先选用工程,然后在Capabilities那一项把Maps开关打开):

......
#import <MapKit/MapKit.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end

如此,大家编译运转品种,可以看出地图出现了,暗中同意显示的是中夏族民共和国地图在中心地方,这些相应是跟系统环境息息相关。如图2所示:

图2 地图视图

  1. 文字阴影(text-shadow、)
  2. 边框: 圆角(border-radius)边框阴影: box-shadow
  3. 盒子模型:box-sizing
  4. 背景:background-size 设置背景图片的尺寸background-origin
    设置背景图片的原点background-clip
    设置背景图片的裁切区域,以”,”分隔能够安装多背景,用于自适应布局
  5. 渐变:linear-gradient、radial-gradient
  6. 联网:transition,可实现动画
  7. 自定义动画
  8. 在CSS3中唯一引入的伪元素是 :selection.
  9. 媒体询问,多栏布局
  10. border-image
  11. 2D转换:transform:translate(x,y) rotate(x,y) skew(x,y)
    scale(x,y)
  12. 3D转换
    CSS3新增伪类有那么些?

3 设置可视区域

接下去重点来了,我们要设置2个可视区域。学过地理
的都明白(小编是地理盲),一个地理地方大家是通过纬度和经度来分明1个位置,纬度中北纬和南纬各分为90度,经度西经和东经则各为180度。在iOS开发中,北纬和东经大家用正数表示,南纬和西经用负数表示。

接下去大家要设置贰个可视区域,不安装大家见到的只是一个暗中同意区域,如前方看到的同等。设置可视区域的代码如下,然后在艺术viewDidLoad中加入调用:

- (void)centerMapOnLocation {
    //1 设置好纬度和经度
    CLLocationCoordinate2D initialLocation = {21.282778, -157.829444}; 
    CLLocationDistance regionRadius = 1000;

    MKCoordinateRegion coordinateRegion = MKCoordinateRegionMakeWithDistance(initialLocation, regionRadius * 2, regionRadius * 2);
    [self.mapView setRegion:coordinateRegion];
}

那里来分析一下,首先是设置好中央点的中纬度。然后是安装区域半径,蕴涵横向和纵向半径,那里都设置的为两千米(南北和东西的跨度范围)。接着依据中央点经纬度和区域半径创造一个Region,末了调用MapView的setRegion方法即可。那时大家再运转代码能够见见效率如图3所示,咱们看来与前方差异了,确实地图已经定位到我们设置的中央点和区域大小了:

图3 设置可视区域

p:first-of-type 接纳属于其父元素的第③个 <p> 成分的各种 <p>
成分。
p:last-of-type 接纳属于其父成分的末段 <p> 成分的各种 <p>
成分。
p:only-of-type 选拔属于其父成分唯一的 <p> 元素的种种 <p>
元素。
p:only-child 选取属于其父成分的唯一子成分的各类 <p> 成分。
p:nth-child(2) 选择属于其父成分的第二个子成分的各种 <p> 成分。
:enabled、:disabled 控制表单控件的剥夺状态。
:checked,单选框或复选框被入选。html5有啥新特点、移除了那么些成分?怎么样处理HTML5新标签的浏览器包容难点?(web前端学习调换群:328058344
禁止闲谈,非喜勿进!)

4 设置标记

接下去来设置1个标志,也正是平日见到的那种大头针。先新建二个类Artwork来代表标记内容,包涵地方坐标,标题和副标题等。地点坐标用于分明大头针地点,而标题和副标题则是点击大头针的时候显得的内容。

@interface Artwork : NSObject <MKAnnotation>

@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, strong) NSString *locationName;
@property (nonatomic, strong) NSString *discipline;
@property (nonatomic) CLLocationCoordinate2D coordinate;

- (instancetype)init:(NSString *)title 
locationName:(NSString *)locationName
 discipline:(NSString *)discipline 
coordinate:(CLLocationCoordinate2D)coordinate;

@end

类Artwork定义如上所示,然后在ViewController.m中进入添加大头针的代码:

- (void)addAnnotation {
    CLLocationCoordinate2D coordinate = {21.283921, -157.831661};
    Artwork *artwork = [[Artwork alloc] init: @"King David Kalakaua"
                          locationName: @"Waikiki Gateway Park"
                          discipline: @"Sculpture"
                          coordinate: coordinate];
    [self.mapView addAnnotation:artwork];
}

专注那里的坐标暂且是团结手动钦命,在后边大家会从二个JSON文件中分析一多级的坐标地方然后设置多少个大头针。然后中间的locationName其实是岗位名字,而MKAnnotation是三个磋商,地图标记的说道,它里面根本定义了一密密麻麻的属性值(此间能够发现协议不唯有艺术,也得以定义属性的),就是标志必须的几脾本性title,subtitle,coordinate。
下一场在viewDidLoad中投入该情势的调用,能够见见大头针突显,点击能够观望title和subtitle的展现。

图4 大头针呈现

只有那样自然是不够的,为了APP的本性化,大家期望能够自定义大头针呈现方式,可以因此设置ViewController达成协议MKMapViewDelegate,然后将mapView的delegate设置为ViewController,并在ViewController中贯彻协议的viewForAnnotation方法即可。代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self centerMapOnLocation];
    [self addAnnotation];
    //1新增delegate设置
    self.mapView.delegate = self;
}

//2 新增代理方法实现
#pragma MKMapViewDelegate
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    if ([annotation isKindOfClass:[Artwork class]]) {
        NSString *identifier = @"pin";
        MKPinAnnotationView *view = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (!view) {
            view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
             //自定义后需要设置canShowCallout为YES,不然点击不会显示信息。
            view.canShowCallout = YES;
            //设置信息展示偏移
            view.calloutOffset = CGPointMake(-10, 5);
            //设置信息按钮
            view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        }
        //设置大头针颜色
        view.pinTintColor = [UIColor blueColor];      
        return view;
    }
    return nil;
}

方法viewForAnnotation中大家定义了大头针的音信偏移和在呈现内容中添加了三个新闻按钮。偏移地点是对准大头针的中游顶部而言的,那里大家设置音信呈现的X轴向左偏移中间地点13个Point,Y轴则从顶部往下移动伍个Point,并将大头针的颜色设置为浅湖蓝,运转效果如图5所示。

图5 自定义大头针

何以区分 HTML 和 HTML5?
新特性:

5 运营地图APP

上一节点击音讯按钮,并没有反应,接下去就要进入点击音信按钮的风浪响应,那里我们是跳转到地图app中,显示从当下地方到园林的明白路线。

率先要求在类Artwork中进入2个主意,用来创建MapItem。那里必要导入Contacts头文件(原来的书文中用的是Address头文件,iOS9后头的连串中早已毫无Address,所以笔者这里用Contacts来顶替)。

#import <Contacts/Contacts.h>
- (MKMapItem *)mapItem {
    NSDictionary *addressDictionary = @{CNPostalAddressStreetKey: self.locationName};
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:self.coordinate addressDictionary:addressDictionary];
    MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
    return mapItem;
}

下一场在ViewController中完成其余3个共谋章程如下。别的,在Xcode菜单栏的Product\Scheme\Edit Scheme选拔Run的Options选项,设置好私下认可地点为Honolulu,如图6所示。那样点击左边的音讯按钮,就会跳转到地图APP中了(那边或然是由于高德地图难题,展现不断驾乘路线,一时没有找到化解措施,若有知情的,麻烦告知一声)。

图6 暗中同意地方设置

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    Artwork *artwork = (Artwork *)view.annotation;
    NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving};
    [[artwork mapItem] openInMapsWithLaunchOptions:launchOptions];
}

运作效果如下:

图7 跳转到地图APP

  1. 拖拽释放(Drag and drop) API
  2. 语义化更好的内容标签(header,nav,footer,aside,article,section)
  3. 音频、视频API(audio,video)
  4. 画布(Canvas) API
  5. 地理(Geolocation) API
  6. 地方离线存款和储蓄 localStorage 短时间积存数据,浏览器关闭后数据不丢掉;
  7. sessionStorage 的数码在浏览器关闭后自动删除
  8. 表单控件,calendar、date、time、email、url、search
  9. 新的技术webworker, websocket, Geolocation接济HTML5新标签:

6 用户地点授权

在iOS应用中,假如运用要恳求地方消息,一般是索要提示用户是或不是授权的,这一个效果怎么落到实处啊?首先在ViewController中加入CLLocationManager,然后在viewDidAppear中插手请求授权的函数调用,假设3遍呼吁授权允许了,系统会记录授权的意况,下次起动应用就不供给再一次授权了。若是拒绝授权了,今后要开启只可以到系统设置里面开启。

瞩目:一般请求授权分为几种艺术,一种是requestWhenInUseAuthorization表示除非利用在前台允许的时候获得地方消息,而除此以外一种是requestAlwaysAuthorization表示假如使用在运维就足以获得地方新闻,不管在前台如故后台运营,为了不外泄隐衷,苹果官方是提议用第2种,即在前台运行的时候运行访问位置音信。

别的2个便于忽略的一点,正是还索要在品种的Info.plist中进入3个配备。配置键名为NSLocationWhenInUseUsageDescription,内容为呼吁授权的文字音讯,本项目填的音讯为To show you cool things nearby

@property (strong, nonatomic) CLLocationManager *locationManager;

- (void)checkLocationStatus {
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) {
        self.mapView.showsUserLocation = YES;
    } else {
        [self.locationManager requestWhenInUseAuthorization];
    }
}

那般在开发银行应用的时候,就会弹出2个提示框,内容为利用请求访问您的任务音讯,让你说了算是不是授权。效果如图8所示:

图8 请求授权效果图

IE8/IE7/IE6援助通过document.createElement方法发生的标签,
能够选拔这一风味让那几个浏览器帮助HTML5新标签,
浏览器帮助新标签后,还须求丰裕标签暗许的体裁:

 

 

本来最好的章程是直接动用成熟的框架、使用最多的是html5shim框架上述内容都以和谐总结的如有错误欢迎指正

地理 2

7 其他

原版的书文中还有一节是经过3个JSON文件来安装八个大头针,并依照职分音信差异设置分化的大头针的水彩,与安装四个大头针效果类似,只是多了JSON解析的步调,这里不再赘言,能够瞻仰笔者的花色最后代码。

此外,地图里面还是能安装覆盖层(overlay),比如用图片来安装覆盖层,恐怕安装路径,多边形等,能够参见那篇作品,这篇文章代码的Objective-C版本地址参见这里

8 整机代码

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图