MKAnnotationViews создаются, но не отображаются только на макросах (работает в iOS) - PullRequest
0 голосов
/ 03 июля 2019

Я создаю MKMapView и добавляю к нему аннотации и наложения. Наложения выглядят хорошо (поэтому все подключено правильно), а аннотации вызываются через делегат (вызывается mapView: viewForAnnotation) и отлично выглядят при отладке, но не отображаются в самом MapView.

Тот же код работает на iOS (отображаются как наложения, так и аннотации), но на макросах отображаются только наложения. Основываясь на количестве обращений к делегату и проверке объектов аннотации (id), я думаю, что расположение в порядке. Я использую MKPinAnnotationView для возврата и сейчас рассматриваю, нужно ли мне просто создать подкласс MKAnnotatonView и использовать изображение. В качестве теста я попытался установить для свойства изображения MKPinAnnotatonView значение NSImage, но это не помогает.

Я бы предпочел MKPinAnnotatonView, но у меня нет идей.

Я гуглил каждый пример, который могу найти, но не видел никаких проблем ... Надеюсь, это какая-то очевидная ошибка.

- (MKAnnotationView *)mapView:(MKMapView *)mapView
            viewForAnnotation:(id<MKAnnotation>)annotation
{
    MKPinAnnotationView *pinView = nil;
    if ([annotation isKindOfClass:[MKClusterAnnotation class]])
    {
        static NSString *clusterPinID = @"com.xxxxx.cluster";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:clusterPinID];
        if ( pinView == nil )
            pinView = [[MKPinAnnotationView alloc]
                       initWithAnnotation:annotation reuseIdentifier:clusterPinID];
        else
            [pinView setAnnotation:annotation];
        pinView.pinTintColor = [NSColor redColor];
        // following line makes no difference - ic_pin is a test png
        pinView.image = [NSImage imageNamed:@"ic_pin"];

    } else{

        TrackAnnotation *trackAnnotation = (TrackAnnotation *) annotation;
        // note change to mkannotation view with custom

        if(annotation != mapView.userLocation)
        {
            static NSString *defaultPinID = @"com.xxxxx.pin";
            pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
            if ( pinView == nil )
                pinView = [[MKPinAnnotationView alloc]
                           initWithAnnotation:annotation reuseIdentifier:defaultPinID];
            else
                [pinView setAnnotation:annotation];

            pinView.pinTintColor = [NSColor greenColor];
            // this is just the type of object for clustering... 
            pinView.clusteringIdentifier = [trackAnnotation.attribs objectForKey:@"name"];
            // following line makes no difference - ic_pin is a test png
            pinView.image = [NSImage imageNamed:@"ic_pin"];
        }
        else {
            [mapView.userLocation setTitle:@"I am here"];
        }
    }
    return pinView;
}

Нет ошибок в журналах и на основе производительности прокрутки и вызовов делегата annotaitonViews на карте - они просто не видны ... Я думал, что NSImage разрешит это, но безрезультатно. Любые мысли были бы полезны, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...