IOS 大众点评 地图实现(周边商铺地图)
来源:互联网 发布:微课程视频制作软件 编辑:程序博客网 时间:2024/04/30 22:10
解决方案:
1.首先在工程中创建一个继承UiViewController的地图类; 然后再SB中拖出一个视图并与SB关联 并拖出地图的控件并右键将协议连接到当前界面
2.在系统工程当中添加mapKIt包, 并在类的.m中导入这个包; 并将地图控件与.m关联;
3.第三步 比较重要,前两部是搭建界面, 第三步是需要解析出要用的精度和纬度, 注意解析类的实现,同时需要在接口API代码中实现方法并调用新增的解析类
3.在页面中UiViewController同时将ud里的city信息取出,这样就可以根据首页城市信息,显示周边的城市信息与首页城市信息一致。
4.通过API取出的经纬信息通过数据接收, 接收后遍历数组,遍历对象,然后拿到每一个对象对应的大头针
5.但是现在没有大头针对象,需要创建大头针类 继承NSOBJECT ,创建出来后,.h要继承mapKit,并且遵守协议MKAnnotation而且要实现协力里的必须的声明;
6.还需要创建一个自定义的MyAnnotationView 继承MKAnnotationView;
然后再自定义的View里面写上初始化方法(打INIT然后改) 然后再方法中设置显示图片
7.然后需要在MAPController中实现协议方法MKmapDelegate 里面的viewForAnnotation200行左右
这里要做的实情是,先导入自定义的myAnnotationView, 然后在方法中创建自定义的myAnnotationView mapview deq 出现警告需要强转
如果没有av创建
8.当选中大头针以后跳转到详情界面
1.搭建界面,在界面中添加一个ViewController,创建MapViewController 并且在storyBoard中与控件关联,在storyboard中拖出一个地图控件,并在
MapViewController中.m中声明好,在storyboard中将地图控件关联自身的delegate。
2.创建类:需要创建一个bussness类,里面声明的属性就是与解析相关的,如下, 同时实现解析类。并在bussness类中加入地图包;
@property (nonatomic,copy)NSString *path;
@property (nonatomic)CLLocationCoordinate2Dcoord;
3.创建MyAnnotation类:这是自定义的类,同样加入地图包,并添加<MKAnnotation>协议,实现协议里的必须属性 继承NSObject;
@property (nonatomic)CLLocationCoordinate2Dcoordinate;
@property (nonatomic,strong)Business * business; //这个后期实现点击效果的时候会用到;
4.创建这个类继承后面的MyAnnotationView : MKAnnotationView 并在其中实现初始化方法
- (instancetype)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString*)reuseIdentifier
{
self = [superinitWithAnnotation:annotationreuseIdentifier:reuseIdentifier];
if (self) {
self.image = [UIImageimageNamed:@"index_map"];
// 通过调用 使大头针的属性更改
// MyAnnotation *ann = annotation;
//
// Business *b = ann.business;
//
// NSData *data = [NSDatadataWithContentsOfURL:[NSURL URLWithString:b.img]];
// self.image = [UIImageimageWithData:data];
//
// self.bounds = CGRectMake(0, 0, 50,50);
}
return self;
}
5.以上创建类,搭建界面的工作都做完后,就需要在viewController里面实现具体的功能了;
5.1因为周边地图的显示是根据,城市信息相关的,而上一个搜索功能实现的时候就已经用了一个轻量级存数据的nsuserdefault实现过了,所以这里需要声明一个可变字典 来继续设置城市信息,然后最终调用API接口方法,返回数据源数组。 相关代码如下;
NSMutableDictionary*dic = [NSMutableDictionarydictionary];
NSUserDefaults *ud = [NSUserDefaultsstandardUserDefaults];
[dicsetObject:[udobjectForKey:@"city"]forKey:@"city"];
NSArray * businesses = [DianpingApirequestBusinessesWithParamsDaTouZhen:dic];
5.2拿到了数据源数组就需要进行遍历了 其中下面的代码是解析类中实现好的代码 ,通过下面的代码和下下的代码就可以清楚精度纬度是怎么来的了,因为已经解析好了; 下面的解析类代码方便我们理解3中代码的意思
Business *b = [[Businessalloc]init];
b.name = [[businessDicobjectForKey:@"name"]componentsSeparatedByString:@"("][0];
CLLocationCoordinate2Dcoord;
coord.longitude =[[businessDicobjectForKey:@"longitude"]floatValue];
coord.latitude =[[businessDicobjectForKey:@"latitude"]floatValue];
b.coord = coord;
下面这段代码与1相关,直接写在1后面
for (Business *bin businesses) {
if (b.coord.latitude > 200) { //大于200是因为这里的错误数据存在经纬度为300的情况 经纬度一般都不是200
continue; //所以当经度大于200的时候跳出当前循环,继续执行下面的代码
}
通过创建对象
MyAnnotation *ann = [[MyAnnotationalloc]init]; annotation用来显示由一个经纬度定义的位置
ann.coordinate = b.coord; //b.coord里面存放的是解析出来具体对象的经纬度数据;
将这个数据传递给自定义的ann的coordinate属性中记录下来
ann.business = b; //这段代码是为4中代码服务的,意思就是将遍历出来的对象 赋值给ann中声明的business属性后期会用到。
[self.mapViewaddAnnotation:ann]; //将自定义的ann加入到视图中
//这句话是直接设置地图的显示缩放大小,并且定位到具体的商户对象的经纬度上。
[self.mapViewsetRegion:MKCoordinateRegionMake(b.coord,MKCoordinateSpanMake(.1,.1))];
}
6.这段代码的意思就是在地图的view中 显示出自己自定义的大头针地图图像; 相关实现很简单,别忘了强转。 标识目前不知道能用在哪里;
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
MyAnnotationView *av = (MyAnnotationView *)[mapViewdequeueReusableAnnotationViewWithIdentifier:@"ann"];
if (!av) {
av = [[MyAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:@"ann"];
}
return av;
}
7.最后一步也就是实现跳转效果:点击大头针跳转到具体的商户信息上 其中前两句话很重要 需要在MyAnnotation中创建一个bussness类的名称为bussness的属性。
3.4需要结合看更健康!
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView*)view{
MyAnnotation *ann =view.annotation; //当前显示地图的自定义大头针的view视图中可以拿到annotation,然后
和自定义的大头针进行关联赋值,现在就能得到自己的annotation。
Business * b = ann.business; //因为自定义大头针类中声明了一个Business类的business(注意大小写,一个是类一个是属性)
//这样就可以得到Business类中所有解析出来的数据了;这样就可以赋值给对象了就可以用了,好开森!!
UIViewController *vc = [[UIViewControlleralloc]init];
UIWebView *wv = [[UIWebViewalloc]initWithFrame:vc.view.bounds];
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:[NSURLURLWithString:b.path]];只需要加载调用
Business类中path路径了(解析出来放到类中,所以可以用)
[wvloadRequest:request];
[vc.viewaddSubview:wv];
[self.navigationControllerpushViewController:vcanimated:YES];
}
- IOS 大众点评 地图实现(周边商铺地图)
- IOS 大众点评 首页界面 仿真实现
- IOS 大众点评 团购界面实现
- IOS 大众点评 搜索界面实现
- 大众点评API获取某坐标周边酒店信息
- 大众点评
- 仿大众点评下拉菜单实现
- 仿大众点评下拉菜单实现
- ios模块化设计(读大众点评模块化文档后的感想)
- 大众点评2015笔试题(答案)
- 大众点评2015 在线笔试(1)
- 高仿大众点评7.9.0UI界面实现(附带源码)
- 【无限互联】学员作品:大众点评IOS客户端
- 【无限互联】学生作品:大众点评iOS客户端
- iOS开发--大众点评API请求签名生成代码示例
- android二级listview列表实现代码(高仿大众点评)
- Android 仿美团网,大众点评购买框悬浮效果实现
- 继承LinearLayout实现大众点评标题和图表的效果
- 聚类与分类的区别
- 理解透明物体渲染
- poj 2138 字符串dp
- Android Studio
- 记录——《C Primer Plus (第五版)》第七章编程练习第四题
- IOS 大众点评 地图实现(周边商铺地图)
- WeiFenLuo.winFormsUI.Docking.dll的使用(停靠效果)
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- Fragment之间切换时添加动画效果
- Mongodb实践心得一
- jstack 线程状态
- Linux编辑器vi使用方法详细介绍
- android sdk update
- IOS 枚举的简单应用;使用