MKMapView, animateDrop?
J'ai mis un NSMutableArray d'objets dérivés à partir d'une classe qui est conforme à la MKAnnotation protocole. J'ai le programme d'installation le programme d'installation de titre et sous-titre pour l'annotation et l'ai ajouté avec succès à la MKMapView à l'aide de:
[[self customMapView] addAnnotations:locationArray];
Ce que je veux faire maintenant est d'animer les broches à l'abandon, j'ai d'abord pensé que je pouvais le faire avec Option1, à l'aide de ce tout fonctionne, mais les broches ne pas faire une animation de chute.
//Option1
//WORKS FOR: pinColor YES, animatesDrop NO, LABEL YES
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
for(MKPinAnnotationView *eachView in views) {
[eachView setAnimatesDrop:YES];
[eachView setPinColor:MKPinAnnotationColorPurple];
}
}
Mon prochain pense essayer Option2, cela semble fonctionner très bien, mais j'ai deux questions. Le titre et les sous-titres ne s'affichent pas, mes annotations personnalisées objet est passé (je peux le voir dans le débogueur), mais l'information qu'il contient est de ne pas en faire dans la nouvelle pin
. Deuxièmement, cela crée un nouvel ensemble de MKAnnotationViews, ce qui se passe pour les anciennes, sont là et les problèmes avec des fuites de mémoire?
//Option2
//FOR: pinColor YES, animatesDrop YES, LABEL NO
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation {
MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier: @"annotation_ID"];
if (pin == nil) {
pin = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"annotation_ID"] autorelease];
} else {
pin.annotation = annotation;
}
pin.pinColor = MKPinAnnotationColorRed;
pin.animatesDrop = YES;
return pin;
}
EDIT: j'ai résolu le titre manquant & sous-titres en ajoutant pin.canShowCallout = YES;
OriginalL'auteur fuzzygoat | 2011-01-17
Vous devez vous connecter pour publier un commentaire.
MKPinAnnotationView est une sous-classe de MKAnnotationView.
MKAnnotationView est un générique de la vue d'annotation pour laquelle vous devez fournir l'image et de l'animation si vous le souhaitez.
MKPinAnnotationView est une pratique de la sous-classe de MKAnnotationView qui fournit automatiquement un code pin image en couleur sélectionnée et une animation de l'abandon broches sur la carte. Vous définissez la animatesDrop de propriété lors de la création de la vue dans viewForAnnotation et il prendra en charge l'animation automatiquement à partir de là.
Si vous ne mettez pas en œuvre viewForAnnotation, un standard rouge broche avec aucune animation n'est affiché.
Par le temps didAddAnnotationViews est appelée, l'animation automatique est déjà arrivé et définissez cette propriété n'a aucun effet.
Cependant, si vous voulez créer une animation personnalisée différente de la valeur par défaut goutte d'animation qui MKPinAnnotationView offre, vous pourriez le faire dans didAddAnnotationViews. La vue sera déjà à son point de destination afin de vous enregistrer et ensuite l'animer à partir d'un autre point de destination.
Si vous êtes heureux avec le dépôt par défaut animation qui MKPinAnnotationView, vous n'avez pas besoin de mettre en œuvre didAddAnnotationViews. Ce délégué méthode est plus utile pour faire d'autres choses que vous pourriez avoir besoin de le faire lorsque toutes les vues d'annotation sont effectivement en place.
Pour vos broches à afficher le titre, l'ensemble
canShowCallout
àYES
où vous définissez lesanimatesDrop
.Pas sûr de ce que tu veux dire par "cela crée un nouvel ensemble de MKAnnotationViews". Dans le viewForAnnotation méthode, vous offre une vue (MKPinAnnotationView) pour la MKAnnotation objet. Ils ne sont pas la même chose.
Aussi, le viewForAnnotation méthode fonctionne comme le cellForRowAtIndexPath méthode pour UITableView où annotation vues pouvez obtenir recyclé qui est pourquoi il est important de définir MKAnnotation des informations spécifiques dans la vue à chaque fois (comme l'annotation de la propriété).
Ok, par la mise en œuvre de viewForAnnotation, vous personnalisez l'affichage par défaut, donc il n'y a pas de chevauchement.
Il a obtenu, très apprécié, merci encore pour ce très utile de répondre.
OriginalL'auteur
Voici la solution la plus simple que j'ai pu trouver. Ce qu'elle fait tomber une seule broche sur le UIMapView dans le viewDidLoad événement.
Les références du projet
MapKit
cadreLa vue sont les suivantes: l'importation
#import <MapKit/MapKit.h>
La-vue-contrôleur met en œuvre
MKMapViewDelegate
protocoleLa vue du contrôleur de la mise en œuvre contient:
Vous sélectionnez l'annotation à l'intérieur de viewForAnnotation qui semble plutôt absurde.
OriginalL'auteur mrt
Mise À Jour Swift3:
OriginalL'auteur Shyam