Video: Bringing BACK The iPhone Headphone Jack - in China 2025
Hvad hvis du vil have din iOS-app til at vise brugerens placering i forhold til, hvor de er? Ideelt set, når du kommer til New York (eller hvor som helst), skal du se et kort, der fokuserer på hvor du er i modsætning til hele USA. Først skal du se på, hvordan du centrerer kortet. For at gøre dette skal du tilføje setInitialRegion method declaration til MapController. m.
Opdater først klassens udvidelse ved at tilføje den fedte kode i Liste 17-3 til klasseudvidelsen i MapController. m.
@interface MapController () @property (svag, ikkeatomisk) IBOutlet MKMapView * mapView; - (IBAction) mapType: (id) afsender; - (void) setInitialRegion; -d
Fordi kortkontrolenheden får sine data fra objektet, skal du, som det skal, opdatere implementeringen for at importere klassen også. Tilføj den modige kodet til MapController. m.
#import "MapController. H" #import "AppDelegate. H" #import "Trip. H"
Endelig skal du tilføje setInitialRegion-metoden til MapController. m.
- (void) setInitialRegion {AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; MKCoordinateRegion region; CLLocationCoordinate2D initialCoordinate = [appDelegate. rejsedestination koordinere]; område. centrum. latitude = initialCoordinate. Breddegrad; område. centrum. længdegrad = initialCoordinate. længde; område. span. latitudeDelta =. 05; område. span. longitudeDelta =. 05; [selv. mapView setRegion: region animated: NO];}
Du skal derefter opdatere viewDidLoad for at bruge denne metode. Tilføj koden med fed skrift i Liste 17-6 for at seDidLoad i MapController. m for at sende denne besked.
- (void) viewDidLoad {[super viewDidLoad]; selv. kortSe. delegere = selv; selv. kortSe. showsUserLocation = YES; [self setInitialRegion]; }
Hvis du kører dette nu, kan du ikke se annotationerne … i det mindste ikke endnu.
Indstilling af regionen er, hvordan du centrerer kortet og indstiller zoomniveauet. Du opnår alt dette med følgende erklæring:
[selv. mapView setRegion: region animeret: NO];
En region er en kortvisningsejendom, der angiver fire stykker information:
-
region. centrum. Breddegrad: Angiver bredden af midten af kortet.
-
region. centrum. længdegrad: Angiver længden af midten af kortet.
For eksempel ville midten af kortet være New York, hvis du skulle indstille disse værdier som
region. centrum. breddegrad = 40. 712756; område. centrum. længdegrad = -74. 006.047;
-
region. span. latitudeDelta: Angiver nord-syd-afstanden (i breddegrader) for at blive vist på kortet.En breddegrad er ca. 111 kilometer (69 miles). En region. span. latitudeDelta på 0. 0036 ville angive en nord-til-syd afstand på kortet på omkring en fjerdedel af en mile. Bredde nord for ækvator har positive værdier, mens breddegrader syd for ækvator har negative værdier.
-
region. span. longiudeDelta: Angiver øst-vest-afstanden (i langsgående grader) for at vise på kortet. Desværre varierer antallet af miles i en længdegrad baseret på breddegraden. For eksempel er en grad af længde ca. 69 miles ved ækvator, men krymper til 0 miles ved polerne.
Longitudes øst for null-meridianen (ved international konvention, passerer nul- eller prime meridianen gennem det kongelige observationscenter, Greenwich, i det østlige London) positive værdier, og længder vest for nullmeridianen har negative værdier.
Selv om span-værdierne giver en implicit zoomværdi for kortet, kan den faktiske region, du ser vist, ikke svare til det spænd, du angiver, fordi kortet går til det zoomniveau, der bedst passer til det område, der er sæt.
Dette betyder også, at selvom du bare ændrer centerkoordinatet på kortet, kan zoomniveauet ændre sig, fordi afstande repræsenteret ved et bestemt spænd kan ændre sig på forskellige breddegrader og længder. For at tage højde for det, inkluderede disse smarte udviklere hos Apple en egenskab, som du kan indstille, der ændrer centerkoordinatet uden at ændre zoomniveauet:
@property (nonatomic) CLLocationCoordinate2D centerCoordinate
Når du ændrer værdien af denne ejendom med en ny CLLocationCoordinate2D, er kortet centreret på den nye koordinat, og spændværdierne opdateres for at opretholde det aktuelle zoomniveau.
Denne CLLocationCoordinate2D-type er noget, du vil bruge meget. CLLocationCoordinate2D-typen er en struktur, der indeholder en geografisk koordinat ved hjælp af WGS 84-referencerammen (referencekoordinatsystemet, der anvendes af Global Positioning System):
typedef struct {CLLocationDegrees latitude; CLLocationDegrees longitude;} CLLocationCoordinate2D;
Her er en lille forklaring:
-
Breddegrad: Bredden i grader. Dette er den værdi, du angiver i den kode, du lige har indtastet (region. Center. Latitude = latitude;). Positive værdier angiver breddegrader nord for ækvator. Negative værdier angiver breddegrader syd for ækvator.
-
længdegrad: længden i grader. Dette er den værdi, du angiver i den kode, du lige har indtastet (område. Center. Længdegrad = længdegrad;). Målinger er i forhold til nulmeridianen, med positive værdier, der strækker sig øst for meridianerne og negative værdier, der strækker sig vest for meridianen.
CLLocationDegrees repræsenterer en længdegrad eller længdegrad angivet i grader og er en dobbelt.
For at centrere kortvisningen i New York, sender du indstillingen setInitialRegion (den kode du lige har indtastet), når visningen er indlæst i viewDidLoad: -metoden.