5

Quando l'app della bussola utilizza una vista mappa per visualizzarne la posizione, c'è un piccolo cono che visualizza la direzione verso cui punta il telefono. Tuttavia, non ero in grado di riprodurlo usando MKMapView che mostra la posizione dell'utente. Questa funzione di cono di vista è disponibile per gli sviluppatori o dovrò implementarne una da solo?iPhone iOS mostra la direzione e l'orientamento dell'utente nello spazio come l'app bussola su MKMapView

iPhone compass map app

Grazie!

+0

una soluzione accurata è disponibile in un altro post qui: http://stackoverflow.com/questions/9876157/is -the-current-location-compass-heading-button-available-in-the-ios-sdk –

risposta

1

ho affrontato una situazione simile. Non penso che abbiamo libreria o impostazioni per visualizzare la direzione sull'icona blu (almeno la mia ricerca non ha avuto successo).

Tuttavia non è difficile creare il nostro indicatore di direzione utilizzando CLHeading (riferimento nella risposta di TommyG).

Quello che ho fatto è stato visualizzare l'icona blu come nella mappa e fornire una piccola freccia in una vista diversa per indicare la direzione.

Spero che questo aiuti in qualche modo

+0

Puoi fornire qualche esempio funzionante per ciò che hai discusso ?? –

+0

L'esempio di codice è disponibile nel collegamento post fornito da user1567676 sopra. Per favore guarda. Se stai cercando un indicatore di direzione personalizzato, anche questo è possibile. – zolio

4

Questo è estremamente facile come un pezzo di torta con MapKit. Si chiama UserTrackingMode. Bisogna scrivere una sola riga di codice per rendere la mappa diventare "compasso":

[mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES]; 

In aggiunta, ci sono circa 3 tipo di UserTrackingMode:

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

Se sei in una delle due modalità di tracciamento (non libero), quindi si scorre la mappa, la modalità verrà automaticamente modificata in modalità libera.

-1

Supponiamo di avere un'immagine temporanea denominata "imageTexture.jpg" salvata nella directory della cache. Il preferito "FavoritePhoto.jpg" viene salvato nella directory dei documenti. Per sovrascrivere quello preferito nella directory dei documenti che puoi fare in questo modo.

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); 
    } 

Sto usando una categoria NSFileManager per ottenere la cartella della cache

Qui è il codice per NSFileManager + Powertools.h

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

Qui potete vedere il codice per 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