ios - Creating Custom Call out View -


i'm trying add view when click in pin, appears title , subtitle , not view did add.

here code

  -(void) inserirmapa {     appdelegate *appdelegate = (appdelegate *)[[uiapplication sharedapplication]delegate];     nsmutablearray *pins = [[nsmutablearray alloc]init]; //array de annotations     for(int icnt = 0; icnt < [_listapins count]; icnt++) {         pin *pin = (pin *) [_listapins objectatindex:icnt];          cllocationcoordinate2d start;         start.latitude = pin.place.latitude;         start.longitude = pin.place.longitude;         mkcoordinateregion region = mkcoordinateregionmakewithdistance(start, 800, 800);         [_mymapview setregion:[_mymapview regionthatfits:region] animated:yes];          // add annotation         mkpointannotation *point = [[mkpointannotation alloc] init];         point.coordinate = start;         point.title = @"where i?";         point.subtitle = @"i'm here!!!";          [_mymapview addannotation:point];          [pins addobject:point];//adiciona annotation no array         [point release];     }     self.myannotations= [nsarray arraywitharray:pins]; //diz que o array myannotations é igual ao array estacionamentos(que contem annotations         [pins release];         [self configurarzoomdomapacomlatitude:appdelegate.latitude elongitude:appdelegate.longitude]; //configura o zoom inicial mapa       [_mymapview addannotations:_myannotations];      [_viewloading sethidden:yes]; } 

and here add custom view. put breakpoint here , function called, when click in pin, appearas title , subtitle..ignoring view added

- (mkannotationview *)mapview:(mkmapview *)mapview viewforannotation:(id <mkannotation>)annotation {     mkannotationview* annotationview = nil;      //your code      uiview *vw = [[uiview alloc] initwithframe:cgrectmake(0, 0, 100, 100)];     vw.backgroundcolor = [uicolor redcolor];     uilabel *label = [[uilabel alloc] initwithframe:cgrectmake(5, 5, 50, 50)];     label.numberoflines = 4;     label.text = @"hello\nhow you\nfine";     [vw addsubview:label];     annotationview.leftcalloutaccessoryview = vw;     return annotationview;  } 

in viewforannotation, code declares , initializes annotationview nil , never instantiates (alloc+init).

therefore, delegate method returns nil tells map view "create default view annotation". default view annotation other user location red pin callout shows title , subtitle.


however, if alloc+init plain mkannotationview fix it, annotations not visible since default mkannotationview has no content. need set image or add subview.

instead, alloc+init mkpinannotationview default show red pin.
should implement annotation view re-use calling dequeuereusableannotationviewwithidentifier improve performance when there lots of annotations:

- (mkannotationview *)mapview:(mkmapview *)mapview viewforannotation:(id <mkannotation>)annotation {     static nsstring *reuseid = @"ann";      mkpinannotationview *annotationview = (mkpinannotationview *)[mapview          dequeuereusableannotationviewwithidentifier:reuseid];     if (annotationview == nil)     {         annotationview = [[mkpinannotationview alloc]                                   initwithannotation:annotation                                      reuseidentifier:@"test"];         annotationview.canshowcallout = yes;  //set yes, default no          //your code          uiview *vw = [[uiview alloc] initwithframe:cgrectmake(0, 0, 100, 100)];         vw.backgroundcolor = [uicolor redcolor];         uilabel *label = [[uilabel alloc] initwithframe:cgrectmake(5, 5, 50, 50)];         label.numberoflines = 4;         label.text = @"hello\nhow you\nfine";         [vw addsubview:label];         annotationview.leftcalloutaccessoryview = vw;     }     else     {         //update view's annotation reference          //because re-using view may have         //been used annotation...         annotationview.annotation = annotation;     }      return annotationview; } 


should fix custom leftcalloutaccessoryview not appearing.
however, note documentation says leftcalloutaccessoryview (and rightcalloutaccessoryview):

the height of view should 32 pixels or less.

the custom view , label code creating both more 32 pixels high.


unrelated comment regarding loop adds annotations:
not need call setregion adding each annotation.
calling setregion tells map view display indicated region.
not needed add annotation (the map doesn't have displaying coordinate adding annotation at).


Comments

Popular posts from this blog

curl - PHP fsockopen help required -

HTTP/1.0 407 Proxy Authentication Required PHP -

c# - Resource not found error -