لماذا تختفي عادة MKMapView صورة الشرح على اتصال؟

StackOverflow https://stackoverflow.com/questions/1805897

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا التأشير خريطتي ووضع صورة على ما يرام، ولكن عندما الاستفادة من الشرح على MapView، صورة يذهب من صورة مخصصة ظهري إلى دبوس أحمر. لماذا هذا؟

- (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id )newAnnotation {
    MKPinAnnotationView *annotation = [[MKPinAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"];
    if (annotation == nil) {
        annotation = [[MKAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"];
    }

    annotation.image = [UIImage imageNamed:@"anno.png"];
    annotation.canShowCallout = YES;
    annotation.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bus_stop_30x30.png"]];
    annotation.leftCalloutAccessoryView = imgView;

    return annotation;
}

ورمز بلادي تبدو مطابقة لبعض نموذج التعليمات البرمجية التي لا تنتج هذه المشكلة.

هل كانت مفيدة؟

المحلول

وردا على سؤالي بك هنا، فقط في حالة البعض الآخر نفس القضية. لاحظ أن أستخدمه "MKPinAnnotationView" - أنه يجب أن يتم تغيير إلى "MKAnnotationView" ويعمل كل شيء

ورمز ثابت:

- (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id )newAnnotation {
    MKAnnotationView *annotation = [[MKAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"];

    if (annotation == nil) {
        annotation = [[MKAnnotationView alloc] initWithAnnotation:newAnnotation reuseIdentifier:@"currentloc"];
    }

    annotation.image = [UIImage imageNamed:@"anno.png"];
    annotation.canShowCallout = YES;
    annotation.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bus_stop_30x30.png"]];
    annotation.leftCalloutAccessoryView = imgView;

    return annotation;
}

نصائح أخرى

وأعتقد أن هذا هو واحد من أفضل الطرق:

(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
    NSLog(@"welcome into the map view annotation");
    MyAnnotation* myAnnotation1=annotation;

    // if it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]])
    return nil;

    if([mapView isEqual:mapMainView]== NO)
    {
        return  nil;
    }
    // try to dequeue an existing pin view first
    //  if ([annotation isKindOfClass:[myAnnotation1 class]]) 
    //  {

    // try to dequeue an existing pin view first
    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";

    MKPinAnnotationView* pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];

    if (nil == pinView)
    {
        MKAnnotationView* annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation

        reuseIdentifier:AnnotationIdentifier] autorelease];
        // annotationView.canShowCallout = YES;
        // pinView.animatesDrop=YES;
        //pinView.pinColor=MKPinAnnotationColorPurple;

        //image
        UIImage* flagImage = [UIImage imageNamed:@"map_marker_over2.png"];

        CGRect resizeRect;

        resizeRect.size = flagImage.size;
        CGSize maxSize = CGRectInset(self.view.bounds,
        [MapPropertyViewController annotationPadding],
        [MapPropertyViewController annotationPadding]).size;
        maxSize.height -= self.navigationController.navigationBar.frame.size.height + [MapPropertyViewController calloutHeight];
        if (resizeRect.size.width > maxSize.width)
        resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height /  resizeRect.size.width * maxSize.width);
        if (resizeRect.size.height > maxSize.height)
        resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height *  maxSize.height, maxSize.height);

        resizeRect.origin = (CGPoint){0.0f, 0.0f};
        UIGraphicsBeginImageContext(resizeRect.size);
        [flagImage drawInRect:resizeRect];
        UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        annotationView.image = resizedImage;
        annotationView.opaque = NO;

        UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [rightButton setTitle:annotation.title forState:UIControlStateNormal];
        [rightButton addTarget:self
        action:@selector(showDetails:)
        forControlEvents:UIControlEventTouchUpInside];
        rightButton.tag = myAnnotation1.tagAnnotation;
        annotationView.rightCalloutAccessoryView = rightButton;

        profileIconView = [[UIImageView alloc]initWithFrame:CGRectMake(18.5f, 10.0f, 37.0f, 30.0f)];
        annotationView.leftCalloutAccessoryView = profileIconView;
        //image
        img = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:[arrImages objectAtIndex:myAnnotation1.tagAnnotation]]]];
        NSLog(@"Annotation Click %d",[arrImages count]);
        NSLog(@"image  %@",img);
        profileIconView.image=img;

        [profileIconView release];

        [annotationView setEnabled:YES];
        [annotationView setCanShowCallout:YES];
        return annotationView;
    }   
    return pinView;
    //  }
    //  return nil;
}
    Try this if you want to set both Source to Destination pin images different.

    MKPointAnnotation * sourceAnno= [[MKPointAnnotation alloc] init];
    sourceAnno.coordinate=CLLocationCoordinate2DMake(YourSourcelatitude,YourSourcelongitude);
    [sourceAnno setAccessibilityLabel:@“Source”];
    sourceAnno.title = @“You”;
    [mapview addAnnotation: sourceAnno];

    DestinationAnno = [[MKPointAnnotation alloc] init];
    DestinationAnno.coordinate = CLLocationCoordinate2DMake(YourDestinationlatitude,YourDestinationlongitude);
    [DestinationAnno setAccessibilityLabel:@“Destination”];
    DestinationAnno.title =@“Destination”;
    [mapview addAnnotation: DestinationAnno];

   In Delegate Method
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{
    MKPointAnnotation *PointAnno=(MKPointAnnotation *)annotation;
    NSString * kPinAnnotationIdentifier = PointAnno.accessibilityLabel;
    MKAnnotationView *AnnotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation    reuseIdentifier:kPinAnnotationIdentifier];

    if ([kPinAnnotationIdentifier isEqualToString:@"Source"]) 
   {
        AnnotationView.centerOffset = CGPointMake(8, -14);
        AnnotationView.calloutOffset = CGPointMake(-8, 0);
        AnnotationView.image = [UIImage imageNamed:@"pin_blue.png"];
        AnnotationView.canShowCallout = YES;
    }
    else if([kPinAnnotationIdentifier isEqualToString:@"Destination"])
    {
        AnnotationView.centerOffset = CGPointMake(8, -14);
        AnnotationView.calloutOffset = CGPointMake(-8, 0);
        AnnotationView.image = [UIImage imageNamed:@"pin_red.png"];
        AnnotationView.canShowCallout = YES;
    }
    return AnnotationView;
}

وشكرا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top