iOS百度地图反编码个人见解
类似于微信中的发送位置拖拽从新定位以及反编码列表附近的位置。
百度地图拖拽更新位置.gif
思路就是将一个UIImageView 固定在地图中间每次更新位置给UIImageView添加劢画即可。
代码如下
#import "FTBasicControl ler.h"typedef void (^SelectBlock) (NSString *address,CLLocationCoordinate2D select);@interface FTUploadAddressControl ler : FTBasicControl ler
@property(nonatomic, copy)SelectBlock selectBlock;
@end
#import "FTUploadAddressControl ler.h"
#import "FTBMKPoiInfo.h"
#import "FTPoiCel l.h"
@interface FTUploadAddressControl ler
()<BMKMapViewDelegate,BMKLocationServiceDelegate,UITableViewDelegate,UITableViewDataSource,BMKGeoCodeSearchDelegate>
@property(nonatomic,strong)BMKLocationService *locService;
@property(nonatomic,strong)BMKUserLocation *userLocation;
@property(nonatomic,strong)BMKMapView*mapView;
@property(nonatomic,strong)UITableView*tableview;
@property(nonatomic,strong)BMKGeoCodeSearch *geocodesearch;
@property(nonatomic,strong)UIImageView*loactionView;
@property(nonatomic,strong)NSMutableArray*dataA;
@property(nonatomic,strong)LxButton *poiBackBtn;
@property(nonatomic,assign)CLLocationCoordinate2D selectedCoordinate;
@property(nonatomic,strong)NSString *selectAddress;
@end
@implementation FTUploadAddressControl ler
-(void)viewWi l lAppear:(BOOL)animated{
[superviewWi l lAppear:animated];self.fd_interactivePopDisabled =YES;if (!([CLLocationManager authorizationStatus] ==kCLAuthorizationStatusAuthorizedAlways | | [CLLocationManager authorizationStatus] ==
kCLAuthorizationStatusAuthorizedWhenInUse)&&[CLLocationManagerauthorizationStatus] != kCLAuthorizationStatusNotDetermined){
[self judgeOpenlocation] ;
}else{
[_mapView viewWi l lAppear] ;
_mapView.delegate = self; //此处记得丌用的时候需要置ni l 否则影响内存的释放
_locService.delegate = self;
_geocodesearch.delegate= self;//此处记得丌用的时候需要置ni l 否则影响内存的释放
_mapView.showsUserLocation= NO;//先关闭显示的定位图层
_mapView.userTrackingMode = 0;
_mapView.showsUserLocation=YES;//显示定位图层
[self. locService startUserLocationService] ;
}
}
-(void)judgeOpenlocation{
UIAlertControl ler *alertVC= [UIAlertControl ler alertControl lerWithTitle:@"打开[定位服务]来允许[应用名字]确定您的位置"message:@"请在系统设置中开启定位服务(设置>隐私>定位服务>应用名字>始终) "preferredStyle:UIAlertControl lerStyleAlert];
[alertVC addAction:[UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancel handler:ni l] ];
[alertVC addAction:[UIAlertActionactionWithTitle:@"去设置"style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnul l action) {if ([ [[UIDevice currentDevice] systemVersion] floatValue] >= 10.000000) {
//跳转到定位权限页面
NSURL *url = [NSURL URLWithString:UIAppl icationOpenSettingsURLString];if( [[UIAppl ication sharedAppl ication]canOpenURL:url] ) {
[[UIAppl ication sharedAppl ication]openURL:url] ;
}
}else{
//跳转到定位开关界面
NSURL *url = [NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];if( [[UIAppl ication sharedAppl ication]canOpenURL:url] ) {
[[UIAppl ication sharedAppl ication]openURL:url] ;
}
}
}] ];
[self presentViewControl ler:alertVC animated:YES completion:ni l];
}
-(void)viewWi l lDisappear:(BOOL)animated
{self.fd_interactivePopDisabled = NO;
[_mapViewviewWi l lDisappear];
_mapView.delegate = ni l; //丌用时置ni l
[self. locService stopUserLocationService];
_geocodesearch.delegate = ni l ;//丌用时置ni l
_locService.delegate = ni l;
}
- (void)viewDid Load{
[superviewDidLoad];
//Doanyadditional setup after loading the view.self.title =@"所在位置";self. locService = [[BMKLocationService al loc] init] ;self.geocodesearch= [ [BMKGeoCodeSearchal loc] init];
[self setup];self.navigationItem. leftBarButtonItem=[[UIBarButtonItemal loc] initWithImage:[ [UIImageimageNamed:@"return"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(backReturn)];}
-(void)backReturn{if (self.selectBlock) {self.selectBlock(self.selectAddress, self.selectedCoordinate);
[self.navigationControl ler popViewControl lerAnimated:YES];
}
}
-(void)setup{
[self.viewaddSubview:self.mapView] ;
[self.viewaddSubview:self.tableview];
[self.mapViewaddSubview:self. loactionView];
[self.mapViewaddSubview:self.poiBackBtn] ;
[self.poiBackBtn LX_SetShadowPathWith:[UIColorgrayColor] shadowOpacity:0.5shadowRadius:5 shadowSide:LXShadowPathBottom shadowPathWidth:3];
FTWS(weakSelf);
[self.poiBackBtnaddCl ickBlock:^(UIButton *button) {
[weakSelf.mapViewsetCenterCoordinate:weakSelf.userLocation. location.coordinate];
}] ;
}
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@"didUpdateUserLocationlat%f, long%f",userLocation. location.coordinate. latitude,userLocation. location.coordinate. longitude);
[_mapView updateLocationData:userLocation];self.userLocation = userLocation;
[self.mapViewsetCenterCoordinate:userLocation. location.coordinate];
BMKReverseGeoCodeOption *option = [ [BMKReverseGeoCodeOption al loc] init] ;option.reverseGeoPoint= userLocation. location.coordinate;
BOOLflag = [_geocodesearch reverseGeoCode:option];if (flag) {
}
//更新位置之后必须停止定位
[_locService stopUserLocationService];
}
-(void)mapView:(BMKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated{
NSLog(@"地图拖劢");
[UIViewanimateWithDuration:0.30animations:^{self. loactionView.centerY-=8;
} completion:^(BOOL finished) {self. loactionView.centerY+=8;
}] ;
CGPoint touchPoint = self.mapView.center;
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];//这里touchMapCoordinate就是该点的经纬度了
NSLog(@"touching%f,%f",touchMapCoordinate. latitude,touchMapCoordinate. longitude);
//选择的上传地址self.selectedCoordinate = touchMapCoordinate;
BMKReverseGeoCodeOption *option = [ [BMKReverseGeoCodeOption al loc] init] ;option.reverseGeoPoint= touchMapCoordinate;
BOOLflag = [_geocodesearch reverseGeoCode:option];if (flag) {
}
}
#pragma mark---获取反编码的数据---
-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcherresult:(BMKReverseGeoCodeResult *)resulterrorCode:(BMKSearchErrorCode)error{
BMKAddressComponent *component=[ [BMKAddressComponental loc]init] ;component=result.addressDetai l;
[self.dataA removeAl lObjects];for (int i =0; i< result.poiList.count; i++) {
BMKPoiInfo*info = result.poiList[i];
FTBMKPoiInfo*ftInfo=[[FTBMKPoiInfo al loc]init];ftInfo.address = info.address;ftInfo.seleced =NO;
if (i == 0) {ftInfo.seleced =YES;self.selectAddress = ftInfo.address;
}
[self.dataA addObject:ftInfo] ;
}
[self.tableview reloadData];
}
#pragma mark---定位的方法--
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
[_mapView updateLocationData:userLocation];
// NSLog(@"heading is%@",userLocation.heading);
}
-(BMKMapView*)mapView{if (!_mapView) {
_mapView=[ [BMKMapViewal loc] initWithFrame:CGRectMake(0,NAVH,Device_Width, 350)] ;
_mapView.zoomLevel = 18;
_mapView.minZoomLevel = 3;
_mapView.maxZoomLevel = 21;
// BMKLocationViewDisplayParam*displayParam=
[ [BMKLocationViewDisplayParam al loc] init] ;
// displayParam. isRotateAngleVal id = true;//跟随态旋转角度是否生效// displayParam. isAccuracyCircleShow= false;//精度圈是否显示// displayParam. locationViewOffsetX= 0;//定位偏移量(经度)
// displayParam. locationViewOffsetY= 0;//定位偏移量纬度
// [_mapView updateLocationViewWithParam:displayParam];
}return_mapView;
}
-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{returnself.dataA.count;
}
-(UITableViewCel l *)tableView:(UITableView*)tableViewcel lForRowAtIndexPath:(NSIndexPath *)indexPath{
FTPoiCel l *cel l =[tableViewdequeueReusableCel lWithIdentifier:@"cel l "forIndexPath: indexPath];if (!cel l) {cel l =[ [FTPoiCel l al loc] initWithStyle:UITableViewCel lStyleDefaultreuseIdentifier:@"cel l "];
}
FTBMKPoiInfo*info = self.dataA[indexPath.row] ;cel l. info= info;returncel l ;
}
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{
[tableView deselectRowAtIndexPath: indexPath animated:YES] ;
FTBMKPoiInfo*info = self.dataA[indexPath.row] ;self.selectAddress = info.address;
[self.dataAenumerateObjectsUsingBlock:^(FTBMKPoiInfo*obj,NSUInteger idx,BOOL *_Nonnul l stop) {i f (o bj == info) {obj.seleced =YES;
}else{obj.seleced =NO;
}
[self.tableviewreloadData] ;
}] ;if (self.selectBlock) {self.selectBlock(self.selectAddress,self.selectedCoordinate);
[self.navigationControl ler popViewControl lerAnimated:YES];
}
}
-(UITableView*)tableview{if (!_tableview) {
_tableview=[ [UITableViewal loc]initWithFrame:CGRectMake(0,self.mapView.bottom,Device_Width,Device_Height - self.mapView.bottom)style:UITableViewStylePlain];
_tableview.delegate = self;
_tableview.dataSource = self;
_tableview.showsVerticalScrol lIndicator= NO;
_tableview.showsHorizontalScrol lIndicator= NO;
_tableview.tableFooterView= [UIView new];
_tableview.rowHeight= 44;
[_tableview registerNib: [UINib nibWithNibName:@"FTPoiCel l "bundle:ni l]forCel lReuseIdentifier:@"cel l "] ;
// [_tableview registerClass:[UITableViewCel l class] forCel lReuseIdentifier:@"cel l "];}return_tableview;
}
-(NSMutableArray*)dataA{i f (!_d a ta A) {
_dataA=[NSMutableArrayarray];
}return_dataA;
}
-(UIImageView*)loactionView{if (!_loactionView) {
_loactionView=[[UIImageViewal loc] initWithImage: [UIImageimageNamed:@"ditu_red"]] ;
_loactionView.center = CGPointMake(self.mapView.width/2,self.mapView.height/2);
}return_loactionView;
}
-(LxButton *)poiBackBtn{if (!_poiBackBtn) {
_poiBackBtn =[LxButton LXButtonWithTitle:ni l titleFont:ni l Image:ni lbackgroundImage:ni l backgroundColor:[UIColorwhiteColor] titleColor:ni lframe:CGRectMake(Device_Width - 75, self.mapView.height - 75, 50, 50)];
[_poiBackBtn setFTCornerdious:25] ;
UIImageView*imageView=[[UIImageViewal loc] initWithImage:[UIImageimageNamed:@"poi_back"] ];imageView.center = CGPointMake(25,25);
[_poiBackBtnaddSubview: imageView] ;
}return_poiBackBtn;
}
@end
今天看到一个网友从原来虚拟主机准备转移至服务器管理自己的业务。这里问到虚拟主机和服务器到底有什么不同,需要用到哪些工具软件。那准备在下班之间稍微摸鱼一下整理我们服务器安装环境和运维管理中常见需要用到的软件工具推荐。第一、系统镜像软件一般来说,我们云服务器或者独立服务器都是有自带镜像的。我们只需要选择镜像安装就可以,比如有 Windows和Linux。但是有些时候我们可能需要自定义镜像的高级玩法,这...
LOCVPS(全球云)发布了新上韩国机房KVM架构主机信息,提供流量和带宽方式,适用全场8折优惠码,优惠码最低2G内存套餐月付仅44元起。这是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。下面分别列出几款韩国机房KVM主机配置信息。韩国KVM流量型套餐:KR-Pl...
CloudCone 商家在以前的篇幅中也有多次介绍到,这个商家也蛮有意思的。以前一直只有洛杉矶MC机房,而且在功能上和Linode、DO、Vultr一样可以随时删除采用按时计费模式。但是,他们没有学到人家的精华部分,要这样的小时计费,一定要机房多才有优势,否则压根没有多大用途。这不最近CloudCone商家有点小变化,有新人洛杉矶优化线路,具体是什么优化的等会我测试看看线路。内存CPU硬盘流量价格...