est-il possible d'avoir un Je vois que l'iPhone SDK n'expose pas la fonctionnalité. Cependant, je me demande si cela fonctionnerait pour faire pivoter toute la vue en utilisant MKMAPView Code intégré> faire face à toujours la direction de l'iPhone est confronté? Fondamentalement, je veux imiter la fonctionnalité de rotation de la carte de la carte sur ma propre application. P>
cgaffineransformMakerotate code>. Cela affecterait-il la prise et le zoom? Y a-t-il une meilleure façon? P>
5 Réponses :
Si vous regardez dans le Guide de programmation de l'application iPhone 3.0 sous Je ne sais pas si cela gère le zoom. Dans l'application Carte standard, j'ai remarqué que le suivi de la rubrique Compass s'arrête dès que vous commencez à pincer le zoom. P>
Aussi, gardez à l'esprit que les directions de localisation sont en degrés alors que les angles de rotation transforment sont des radians. P> Support de périphérique CODE> Vous trouverez des informations sur le magnétomètre (AKA Compass). Une fois que vous avez commencé à obtenir des informations sur la rubrique (via la méthode CODE> DIDUPDateDeading CODE>), vous devez être capable d'obtenir les données de Compass, puis utilisez-la pour calculer la valeur de transformation de rotation appropriée à appliquer à la vue Carte. p>
Je peux confirmer que cela fonctionne bien. Voici le code que j'utilise: mapview code> est mon instance mkapview p> p> p>
Le code ci-dessus fonctionne pour faire pivoter la carte, mais qu'en est-il des annotations? Comment la transformation serait-elle appliquée à ceux-ci aussi?
J'ai posté une réponse pour votre question ci-dessous.
Pour faire pivoter le MAPView mais non les annotations que vous pouvez utiliser le code suivant pour compenser la rotation des cartes.
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { double rotation = newHeading.magneticHeading * 3.14159 / 180; CGPoint anchorPoint = CGPointMake(0, -23); // The anchor point for your pin [mapView setTransform:CGAffineTransformMakeRotation(-rotation)]; [[mapView annotations] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { MKAnnotationView * view = [mapView viewForAnnotation:obj]; [view setTransform:CGAffineTransformMakeRotation(rotation)]; [view setCenterOffset:CGPointApplyAffineTransform(anchorPoint, CGAffineTransformMakeRotation(rotation))]; }]; }
Qu'en est-il d'apporter cette fonctionnalité dans iOS6? Pouvons-nous faire pivoter la carte nord orientée? J'ai essayé d'orienter la carte, mais c'est un échec.
Si vous utilisez une navigationvontroller, essayez ceci:
//For Left button MKUserTrackingBarButtonItem *buttonItem = [[MKUserTrackingBarButtonItem alloc]initWithMapView:_mapView]; self.navigationItem.leftBarButtonItem = buttonItem; // For Right Button MKUserTrackingBarButtonItem *buttonItem = [[MKUserTrackingBarButtonItem alloc]initWithMapView:_mapView]; self.navigationItem.rightBarButtonItem = buttonItem;
Solution simple à Swift 3.0. Assurez-vous de mettre la ligne dans si vous ne voulez pas que la carte soit centrée sur l'emplacement de l'utilisateur, vous pourriez faire quelque chose comme CETTE P> mapviewDidfinishloadingMap code> ou il l'ignorera
public func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
{
if(CLLocationCoordinate2DIsValid(mapView.centerCoordinate))
{
mapView.camera.heading = newHeading.trueHeading
}
}