5

Cuando la aplicación brújula usa una vista de mapa para mostrar su ubicación, hay un pequeño cono que muestra la dirección en la que apunta el teléfono. Sin embargo, no pude reproducirlo con MKMapView que muestra la ubicación del usuario. ¿Esta característica del cono de la vista está disponible para los desarrolladores, o tendré que implementar una yo mismo?iOS iPhone muestra la dirección y orientación del usuario en el espacio como la aplicación brújula en MKMapView

iPhone compass map app

Gracias!

+0

se proporciona una buena solución en otro post aquí: http://stackoverflow.com/questions/9876157/is -the-current-location-compass-heading-button-available-in-the-ios-sdk –

Respuesta

1

que se enfrentó a una situación similar. No creo que tengamos biblioteca o configuración para mostrar la dirección en el icono azul (al menos mi búsqueda no fue exitosa).

Sin embargo, no es difícil crear nuestro propio indicador de dirección con el CLHeading (referencia en la respuesta de TommyG).

Lo que hice fue mostrar el icono azul como en el mapa y proporcionar una pequeña flecha en una vista diferente para indicar la dirección.

Espero que esto ayude de alguna manera

+0

¿Puedes proporcionarnos alguna muestra de trabajo para lo que discutiste? –

+0

La muestra de código está disponible en el enlace de publicación proporcionado por user1567676 arriba. Por favor échale un vistazo. Si está buscando un indicador de dirección personalizado, eso también es posible. – zolio

4

Esto es extremadamente fácil como un trozo de tarta con MapKit. Esto se llama UserTrackingMode. Hay que anotar una sola línea de código para que se convierta en el mapa "de compás":

[mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES]; 

Además, hay cerca de 3 tipo de UserTrackingMode:

- MKUserTrackingModeNone (free scrolling map) 
- MKUserTrackingModeFollow (center the user's location) 
- MKUserTrackingModeFollowWithHeading (center user's location and track user's heading (direction)). 

Si eres en uno de los 2 modos de seguimiento (no libre), luego desplaza el mapa, el modo cambiará automáticamente al modo libre.

-1

Supongamos que tiene una imagen temporal llamada "imageTexture.jpg" guardada en el directorio de caché. El favorito "FavoritePhoto.jpg" se guarda en el directorio de documentos. Para sobrescribir el favorito en el directorio de documentos, puede hacer esto.

NSError *errorDesc; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *statesDescriptionPath = [documentsDirectory stringByAppendingPathComponent:@"FavoritePhoto.jpg"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSString *cacheDirectory = [NSFileManager getCacheDirectory]; 
    NSString *temporaryPath = [cacheDirectory stringByAppendingPathComponent:@"imageTexture.jpg"]; 

    NSURL *originalURL = [NSURL fileURLWithPath:statesDescriptionPath]; 
    [fileManager replaceItemAtURL:originalURL withItemAtURL:[NSURL fileURLWithPath:temporaryPath] backupItemName:nil options:NSFileManagerItemReplacementUsingNewMetadataOnly resultingItemURL:&originalURL error:&errorDesc]; 

    if (errorDesc) 
    { 
     NSLog(@"there was an error overwriting the favorite photo: %@", errorDesc.description); 
    } 

estoy usando una categoría NSFileManager para obtener el directorio de caché

Este es el código para NSFileManager + Powertools.h

#import <Foundation/Foundation.h> 
@interface NSFileManager (Powertools) 
+ (NSString *)getCacheDirectory; 
@end 

Aquí se puede ver el código de NSFileManager + Powertools. m

#import "NSFileManager+Powertools.h" 

@implementation NSFileManager (Powertools) 

+ (NSString *)getCacheDirectory 
{ 
    NSString *path = nil; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
     if ([paths count]) 
     { 
      NSString *bundleName = 
      [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; 
      path = [[paths objectAtIndex:0] stringByAppendingPathComponent:bundleName]; 
     } 
     return path; 
} 
@end 
Cuestiones relacionadas