亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何自定義MKAnnotationView的標注氣泡?

如何自定義MKAnnotationView的標注氣泡?

躍然一笑 2019-11-21 14:44:03
我目前正在使用mapkit,并且卡住了。我正在使用一個自定義注釋視圖,并且我想使用image屬性使用自己的圖標在地圖上顯示該點。我的工作很好。但是我還想做的是覆蓋默認的標注視圖(觸摸注釋圖標時標題/副標題出現的氣泡)。我希望能夠控制標注本身:mapkit僅提供對左側和右側輔助標注視圖的訪問,但是無法為標注氣泡提供自定義視圖,也不能為其提供零大小,或者其他任何方式。我的想法是在my中重寫selectAnnotation / deselectAnnotation MKMapViewDelegate,然后通過調用自定義注釋視圖來繪制自己的自定義視圖。這有效,但僅當在我的自定義批注視圖類中canShowCallout設置為時才有效YES。如果我將此設置為NO,則不會調用這些方法(這是我想要的,因此不會繪制默認的標注氣泡)。因此,我無法知道用戶是否觸摸了地圖上的我的點(選中了它)或觸摸了一個不屬于我的注釋視圖的點(選中了它)而沒有顯示默認的標注氣泡視圖。我嘗試走另一條路,只是自己在地圖上處理所有觸摸事件,但似乎無法正常工作。我讀了其他與在地圖視圖中捕獲觸摸事件有關的帖子,但它們并不是我想要的。有沒有辦法在繪制之前深入地圖視圖以刪除標注氣泡?我很茫然。有什么建議么?我是否缺少明顯的東西?
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

有一個更簡單的解決方案。


創建一個自定義UIView(用于您的標注)。


然后創建的子類MKAnnotationView,并重寫setSelected如下:


- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

    [super setSelected:selected animated:animated];


    if(selected)

    {

        //Add your custom view to self...

    }

    else

    {

        //Remove your custom view...

    }

}

景氣,工作完成了。


查看完整回答
反對 回復 2019-11-21
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

繼續@TappCandy出色的簡單答案,如果您想以與默認氣泡相同的方式為氣泡設置動畫,則我制作了以下動畫方法:


- (void)animateIn

{   

    float myBubbleWidth = 247;

    float myBubbleHeight = 59;


    calloutView.frame = CGRectMake(-myBubbleWidth*0.005+8, -myBubbleHeight*0.01-2, myBubbleWidth*0.01, myBubbleHeight*0.01);

    [self addSubview:calloutView];


    [UIView animateWithDuration:0.12 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^(void) {

        calloutView.frame = CGRectMake(-myBubbleWidth*0.55+8, -myBubbleHeight*1.1-2, myBubbleWidth*1.1, myBubbleHeight*1.1);

    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.1 animations:^(void) {

            calloutView.frame = CGRectMake(-myBubbleWidth*0.475+8, -myBubbleHeight*0.95-2, myBubbleWidth*0.95, myBubbleHeight*0.95);

        } completion:^(BOOL finished) {

            [UIView animateWithDuration:0.075 animations:^(void) {

                calloutView.frame = CGRectMake(-round(myBubbleWidth/2-8), -myBubbleHeight-2, myBubbleWidth, myBubbleHeight);

            }];

        }];

    }];

}

它看起來相當復雜,但是只要您將標注氣泡的點設計為居中,您就應該可以替換myBubbleWidth并myBubbleHeight以自己的大小工作。并記住確保子視圖的autoResizeMask屬性設置為63(即“全部”),以便它們在動畫中正確縮放。


:-喬


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 1037 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號