地圖錨點(diǎn)的使用方法

需在Connection中選中Action錨點(diǎn)針對于地圖定位功能,就是我們?nèi)粘I钪械貓D定位的小圖標(biāo),為我們的出行提供和了極大方便,現(xiàn)在就為大家介紹一下在ios開發(fā)中錨點(diǎn)的使用方法與步驟(此代碼使用的是固定的位置,可針對其需要加以具體的修改)

一档叔、 在ViewController.m中導(dǎo)入我們所需要的頭文件

#import <MapKit/MapKit.h>//地圖
#import <CoreLocation/CoreLocation.h>//定位

二牌废、 對頁面進(jìn)行布局,拖拽控件并將我們所要用到的控件與ViewController進(jìn)行關(guān)聯(lián) 具體如下圖所示

屏幕快照 2017-08-03 下午7.09.19.png

注意: 在進(jìn)行控件的拖拽時(shí) 我們要掌握先后的次序,先拖拽Map View 控件,并將它不滿全屏,其次在將 lable Text Field Button 放在Map View 上,在關(guān)聯(lián)button時(shí)需在Connection中選中Action再進(jìn)行關(guān)聯(lián)

具體關(guān)聯(lián)后的效果 如下圖所示

屏幕快照 2017-08-03 下午7.14.39.png

三、因?yàn)槲覀円獙?shí)現(xiàn)的功能有手勢的需要 所以我們要為程序 寫一下手勢的代碼并將地圖的一個必要功能實(shí)現(xiàn)在.m中

- (void)viewDidLoad
{
    [super viewDidLoad];
    //初始化地理編碼
    _geocoder = [[CLGeocoder alloc] init];
    // 設(shè)置地圖的顯示風(fēng)格,此處設(shè)置使用標(biāo)準(zhǔn)地圖
    self.mapView.mapType = MKMapTypeStandard;
    // 設(shè)置地圖可縮放
    self.mapView.zoomEnabled = YES;
    // 設(shè)置地圖可滾動
    self.mapView.scrollEnabled = YES;
    // 設(shè)置地圖可旋轉(zhuǎn)
    self.mapView.rotateEnabled = YES;
    // 設(shè)置顯示用戶當(dāng)前位置
    self.mapView.showsUserLocation = YES;
    // 調(diào)用自己實(shí)現(xiàn)的方法設(shè)置地圖的顯示位置和顯示區(qū)域
     [self locateToLatitude:37.23 longitude:122.1234];
    
   // 創(chuàng)建一個手勢處理器 用于檢測處理 長按手勢
    UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
   // 為該控件 添加手勢處理器
    [self.view addGestureRecognizer:gesture];
   // 設(shè)置代理方法
    self.mapView.delegate = self;
    
}

四 倾芝、接下來我們要對手勢的回調(diào)寫具體的代碼

#pragma mark -手勢回調(diào)
-(void)longPress:(UILongPressGestureRecognizer *)getsure
{
    // 獲取長按點(diǎn)的坐標(biāo)
    CGPoint pos = [getsure locationInView:self.mapView];
    
    // 把獲取到的坐標(biāo)轉(zhuǎn)換成經(jīng)緯度
    CLLocationCoordinate2D coord = [self.mapView convertPoint:pos toCoordinateFromView:self.mapView];
    // 再把經(jīng)緯度值添加到  CLLocation(定位)
    CLLocation *location = [[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
    // 根據(jù)經(jīng)緯度反向解析地址
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error)
    {
        if (placemarks.count >0 &&  error == nil)
        {
            // 獲取解析得到的第一個地址信息
            CLPlacemark *placemark = placemarks[0];
            
            // 獲取地址信息中的FormattedAddressLines對應(yīng)的詳細(xì)地址
            NSArray *addrArray = placemark.addressDictionary[@"FormattedAddressLines"];
            // 將詳細(xì)地址拼接成一個字符串
            NSMutableString *address = [[NSMutableString alloc] init];
            
            for (int i = 0; i < addrArray.count; i++)
            {
                [address appendString:addrArray[i]];
            }
            
            // 創(chuàng)建錨點(diǎn)(MKPointAnnotation)
            MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
            // 設(shè)置標(biāo)題
            annotation.title = placemark.name;
            // 設(shè)置子標(biāo)題
            annotation.subtitle = address;
            // 把坐標(biāo)放入錨點(diǎn)里面
            annotation.coordinate = coord;
            // 添加錨點(diǎn)
            [self.mapView addAnnotation:annotation];
        }
       
        
    }];
}


五、點(diǎn)擊回到輸入的經(jīng)緯度位置

- (IBAction)goClicked:(id)sender
{
    // 關(guān)閉兩個文本框的虛擬鍵盤
    [self.latitudeField resignFirstResponder];
    [self.longitudeField resignFirstResponder];
    //緯度
    NSString* latitudeStr = self.latitudeField.text;
    //經(jīng)度
    NSString* longtitudeStr = self.longitudeField.text;
    // 如果用戶輸入的經(jīng)度、緯度不為空
    if (latitudeStr != nil && latitudeStr.length > 0
        && longtitudeStr != nil && longtitudeStr.length > 0)
    {
        // 調(diào)用自己實(shí)現(xiàn)的方法設(shè)置地圖的顯示位置和顯示區(qū)域
        [self locateToLatitude:latitudeStr.floatValue
                     longitude:longtitudeStr.floatValue];
    }

}

六、對一些方法進(jìn)行封裝進(jìn)行以后的調(diào)用

- (void)locateToLatitude:(CGFloat)latitude longitude:(CGFloat)longitude{
    // 設(shè)置地圖中心的經(jīng)漂彤、緯度
    CLLocationCoordinate2D center = {latitude , longitude};
    // 設(shè)置地圖顯示的范圍,
    MKCoordinateSpan span;
    // 地圖顯示范圍越小灾搏,細(xì)節(jié)越清楚
    span.latitudeDelta = 0.01;
    span.longitudeDelta = 0.01;
    // 創(chuàng)建MKCoordinateRegion對象挫望,該對象代表了地圖的顯示中心和顯示范圍。
    MKCoordinateRegion region = {center,span};
    // 設(shè)置當(dāng)前地圖的顯示中心和顯示范圍
    [self.mapView setRegion:region animated:YES];
    
    // 創(chuàng)建MKPointAnnotation對象——代表一個錨點(diǎn)
    MKPointAnnotation* annotation = [[MKPointAnnotation alloc] init];
    annotation.title = @"北京石羿科技發(fā)展有限公司";
    annotation.subtitle = @"海淀區(qū)中關(guān)村軟件園";
    
    CLLocationCoordinate2D coordinate = {latitude , longitude};
    annotation.coordinate = coordinate;
    // 添加錨點(diǎn)
    [self.mapView addAnnotation:annotation];
}

七狂窑、對錨點(diǎn)的外觀進(jìn)行具體的設(shè)置

// MKMapViewDelegate協(xié)議中的方法媳板,該方法的返回值可用于定制錨點(diǎn)控件的外觀
- (MKAnnotationView *) mapView:(MKMapView *)mapView
             viewForAnnotation:(id <MKAnnotation>) annotation{
    static NSString* annoId = @"fkAnno";
    
    
    // 獲取可重用的錨點(diǎn)控件
    MKAnnotationView* annoView = [mapView
                                  dequeueReusableAnnotationViewWithIdentifier:annoId];
    // 如果可重用的錨點(diǎn)控件不存在,創(chuàng)建新的可重用錨點(diǎn)控件
    if (!annoView)
    {
        annoView= [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annoId];
        /*
         如果不想改變錨點(diǎn)控件的圖片泉哈,只想改變顏色蛉幸,則可創(chuàng)建MKPinAnnotationView實(shí)例
         再修改MKPinAnnotationView對象的pinColor屬性即可。
         */
    }
    // 為錨點(diǎn)控件設(shè)置圖片
    annoView.image = [UIImage imageNamed:@"pos.gif"];
    // 設(shè)置該錨點(diǎn)控件是否可顯示氣泡信息
    annoView.canShowCallout = YES;
    // 定義一個按鈕丛晦,用于為錨點(diǎn)控件設(shè)置附加控件
    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    // 為按鈕綁定事件處理方法
    [button addTarget:self action:@selector(buttonTapped:)
     forControlEvents:UIControlEventTouchUpInside];
    // 可通過錨點(diǎn)控件的rightCalloutAccessoryView奕纫、leftCalloutAccessoryView設(shè)置附加控件
    annoView.rightCalloutAccessoryView = button;
    return annoView;
    
}

- (void) buttonTapped:(id)sender
{
    NSLog(@"您點(diǎn)擊了錨點(diǎn)信息!");
}

最后可在打印欄中看到以上代碼的信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末采呐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子搁骑,更是在濱河造成了極大的恐慌斧吐,老刑警劉巖又固,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異煤率,居然都是意外死亡仰冠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門蝶糯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洋只,“玉大人,你說我怎么就攤上這事昼捍∈缎椋” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵妒茬,是天一觀的道長担锤。 經(jīng)常有香客問我,道長乍钻,這世上最難降的妖魔是什么肛循? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮银择,結(jié)果婚禮上多糠,老公的妹妹穿的比我還像新娘。我一直安慰自己浩考,他們只是感情好夹孔,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怀挠,像睡著了一般析蝴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绿淋,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天闷畸,我揣著相機(jī)與錄音,去河邊找鬼吞滞。 笑死佑菩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裁赠。 我是一名探鬼主播殿漠,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼佩捞!你這毒婦竟也來了绞幌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤一忱,失蹤者是張志新(化名)和其女友劉穎莲蜘,沒想到半個月后谭确,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡票渠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年逐哈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片问顷。...
    茶點(diǎn)故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡昂秃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杜窄,到底是詐尸還是另有隱情肠骆,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布羞芍,位于F島的核電站哗戈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荷科。R本人自食惡果不足惜唯咬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畏浆。 院中可真熱鬧胆胰,春花似錦、人聲如沸刻获。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝎毡。三九已至厚柳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沐兵,已是汗流浹背别垮。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扎谎,地道東北人碳想。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像毁靶,于是被迫代替她去往敵國和親胧奔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,352評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫预吆、插件龙填、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,131評論 4 61
  • 小時(shí)侯最喜歡 背著母親一針一線 縫的歪歪曲曲的布包 里面塞著昨晚未完成的作業(yè) 還有一顆溫?zé)岬碾u蛋 和小朋友們蹦蹦跳...
    叫我梅芳就好閱讀 244評論 2 0
  • 01 “你看岩遗,她又來了胶背。怎么又發(fā)這種朋友圈?” “就是啊喘先,太負(fù)面情緒了吧。和男朋友鬧點(diǎn)小脾氣廷粒,就要鬧的滿城風(fēng)雨窘拯,過...
    莯格_閱讀 571評論 9 7