Huis Sociale Media Hoe u een knop voor de huidige locatie aan uw iOS-app kunt toevoegen - dummies

Hoe u een knop voor de huidige locatie aan uw iOS-app kunt toevoegen - dummies

Video: Uitleg: zo deel je live je locatie met je vrienden via apps 2024

Video: Uitleg: zo deel je live je locatie met je vrienden via apps 2024
Anonim

Het is gemakkelijk om een ​​knop toe te voegen aan de werkbalkbalk in uw iOS-app om in te zoomen naar de huidige locatie en vervolgens terug naar de kaartregio en de reeks die u momenteel weergeeft.

Voeg de vetgedrukte code toe om de knop toe te voegen in de MapController-methode viewDidLoad.

- (void) viewDidLoad {[super viewDidLoad]; zelf. kaart overzicht. delegeren = zelf; zelf. kaart overzicht. showsUserLocation = YES; [self setInitialRegion]; RTAppDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {UILabel * titleLabel = [[UILabel alloc] initWithFrame: CGRectMake (0, 0, 250, 44)]; titleLabel. textColor = [UIColor yellowColor]; titleLabel. font = [UIFont boldSystemFontOfSize: 17]; titleLabel. textAlignment = NSTextAlignmentCenter; titleLabel. backgroundColor = [UIColor clearColor]; titleLabel. text = [self mapTitle]; UIBarButtonItem * titleView = [[UIBarButtonItem alloc] initWithCustomView: titleLabel]; UIBarButtonItem * flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target: nil action: nil]; flexibleSpace. breedte = 1,0; NSMutableArray * itemsArray = [self. werkbalk. items mutableCopy]; [itemsArray insertObject: flexibleSpace atIndex: [itemsArray count] -2]; [itemsArray insertObject: titleView atIndex: [itemsArray count] -2]; [zelf. werkbalk setItems: itemsArrayanimated: NO];} else {self. title = [appDelegate. trip mapTitle];} [self addAnnotations]; UIBarButtonItem * locateButton = [[UIBarButtonItem alloc] initWithTitle: @ "Locate" style: UIBarButtonItemStyleBordered target: self action: @selector (goToLocation:)];; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { NSMutableArray * itemsArray = [zelf. werkbalk. items mutableCopy]; [itemsArray insertObject: locateButton atIndex: [itemsArray-aantal]]; [zelf. werkbalk setItems: itemsArray geanimeerd: NO]; } anders { zelf. navigationItem. rightBarButtonItem = locateButton; } }

Wanneer de gebruiker op de knop Locate tikt die u hier hebt gemaakt, heeft u opgegeven dat het goToLocation: bericht moet worden verzonden [action: @selector (goToLocation:)] naar de MapController (doel: zelf).

UIBarButtonItem * locateButton = [[UIBarButtonItem alloc] initWithTitle: @ "Zoek" stijl: UIBarButtonItemStylePlain doel: zelfactie: @selector (goToLocation:)]; zelf. navigationItem. rightBarButtonItem = locateButton;

Vergeet niet dat om terug te gaan naar een locatie, u een gesimuleerde locatie moet kiezen als u de Simulator gebruikt.

Voeg vervolgens de goToLocation: methode toe aan MapController. m.

MKUserLocation * annotation = self. kaart overzicht. userLocation; CLLocation * location = annotation. plaats; als (nul == locatie) terugkeren; CLLocationDistance distance = MAX (4 * locatie. HorizontalAccuracy, 500); MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (locatie, coördinaat, afstand, afstand); [zelf. mapView setRegion: region animated: NO]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {NSArray * itemsArray = self. werkbalk. items; UIBarButtonItem * locateButton = [itemsArray-objectAtIndex: [aantal itemsArray] -1]; locateButton. actie = @selector (goToDestination:); locateButton. title = @ "Bestemming";} else {self. navigationItem. rightBarButtonItem. actie = @selector (goToDestination:); zelf. navigationItem. rightBarButtonItem. title = @ "Bestemming";}}

Wanneer de gebruiker op de knop Locate tikt, controleert uw app eerst of de locatie beschikbaar is. (Het kan enkele seconden duren nadat de toepassing start om de locatie beschikbaar te maken.) Zo niet, dan keert u eenvoudig terug van de methode zonder de regio te wijzigen. (U kunt natuurlijk een waarschuwing weergeven waarin de gebruiker wordt geïnformeerd over wat er gebeurt en om het over 10 seconden opnieuw te proberen)

Als de locatie beschikbaar is, berekent uw app de periode voor de regio waar de gebruiker naartoe verhuist. In dit geval is de volgende code

CLLocationDistance-afstand = MAX (4 * locatie. HorizontalAccuracy, 500);

berekent de reeks om vier keer de horizontalAccuracy van het apparaat te zijn (maar niet minder dan 1, 000 meter). horizontalAccuracy is een straal van onzekerheid gezien de nauwkeurigheid van het apparaat; dat wil zeggen, de gebruiker bevindt zich ergens binnen die cirkel.

Vervolgens roept u de functie MKCoordinateRegionMakeWithDistance aan waarmee een nieuwe MKCoordinateRegion wordt gemaakt op basis van de opgegeven coördinaat- en afstandswaarden.

Als u de reeks niet had willen wijzigen, had u eenvoudigweg de centerCoordinate-eigenschap van de kaartweergave kunnen instellen op userLocation en zou de regio op de userLocation-coördinaat gecentreerd zijn zonder de reeks te wijzigen.

Wanneer de gebruiker op de knop Locatie tikt, wijzigt u de titel op de knop in de titel van de map en wijzigt u de @selector in (goToDestination:). Je opent de knop op de iPad in de werkbalkitemsArray en op de iPhone via het navigationItem.

Dit betekent dat de volgende keer dat de gebruiker de knop aanraakt, het GoToDestination: -bericht wordt verzonden, dus u kunt beter de code toevoegen aan MapController. m. Hiermee wordt de regio teruggezet naar de bestemmingsregio en wordt de knoptitel teruggezet naar Locate.

- (ongeldig) goToDestination: (id) afzender {[self setInitialRegion]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {NSArray * itemsArray = self. werkbalk. items; UIBarButtonItem * locateButton = [itemsArray-objectAtIndex: [aantal itemsArray] -1]; locateButton. actie = @selector (goToLocation:); locateButton. title = @ "Lokaliseren";} else {self. navigationItem.rightBarButtonItem. actie = @selector (goToLocation:); zelf. navigationItem. rightBarButtonItem. title = @ "Lokaliseren";}}

Voer nu uw app uit. Omdat je al twee annotaties op de kaart van New York hebt staan, wil je misschien de Simulator instellen om een ​​verre locatie zoals San Francisco te gebruiken. Op die manier kunt u gemakkelijk zien dat de kaart werkt.

Omdat u de gebruikerslocatie hebt, bent u misschien geneigd om die te gebruiken om de kaart te centreren, en dat zou goed werken, zolang u het mechanisme van locatiebepaling start zodra het programma wordt gestart.

Het probleem is dat het enige tijd kan duren voordat de hardware de huidige locatie heeft gevonden en als u niet lang genoeg wacht, krijgt u een foutmelding. U kunt de code toevoegen om de kaart te centreren naar een methode die later wordt uitgevoerd, zoals

- (void) observeValueForKeyPath: (NSString *) keyPath ofObject: (id) objectwijziging: (NSDictionary *) verander context: (ongeldig *) context {

Dit bericht wordt verzonden zodra de kaart locatiegegevens ontvangt, maar u ziet een eerste weergave en vervolgens een weergave van de gecentreerde weergave. Om esthetische redenen moet MapController en MapView bij het opstarten van het programma worden geïnitialiseerd - een oefening voor de lezer.

Hoe u een knop voor de huidige locatie aan uw iOS-app kunt toevoegen - dummies

Bewerkers keuze

Bewerk modus paneel in SharePoint 2010 - dummies

Bewerk modus paneel in SharePoint 2010 - dummies

In SharePoint 2010, een bewerk modus paneel is alleen zichtbaar in, ook , publiceerpagina Bewerkingsmodus. Dat maakt dit paneel geschikt voor allerlei informatie of eigenschappen die nuttig zijn voor uw editors, maar die u niet wilt zien als de pagina in de leesmodus staat. Als u een deelvenster Bewerkmodus invoegt in ...

Zoeken naar hulp bij SharePoint Developer Center - dummies

Zoeken naar hulp bij SharePoint Developer Center - dummies

Als u hulp nodig heeft bij het ontwikkelen van pagina's en sites in SharePoint 2010, het SharePoint Developer Center is een one-stop-shop. De site bevat communityforums, video's, whitepapers en andere onmisbare bronnen voor ontwikkelaars. Het SharePoint Developer Center is een geweldige plek om te verkennen als je net begint. Een aantal video's doorlopen basisproblemen ...

Site-instellingen zoeken in SharePoint 2016 - dummies

Site-instellingen zoeken in SharePoint 2016 - dummies

Gelukkig is het vinden van de pagina Site-instellingen in SharePoint 2016 net zo eenvoudig als twee klikken van de muis. Klik op het tandwielpictogram Instellingen en kies Site-instellingen. Wanneer de pagina Site-instellingen wordt geladen, ziet u een aantal links die allemaal zijn gegroepeerd in verschillende categorieën. De pagina Site-instellingen kan ontmoedigend en overweldigend zijn. Maakt u zich geen zorgen, ...

Bewerkers keuze

Hoe u een knop voor de huidige locatie aan uw iOS-app kunt toevoegen - dummies

Hoe u een knop voor de huidige locatie aan uw iOS-app kunt toevoegen - dummies

Is eenvoudig om een ​​knop toe te voegen aan de werkbalkbalk in uw iOS-app om in te zoomen naar de huidige locatie en vervolgens terug naar de kaartregio en de reeks die u momenteel weergeeft. Voeg de vetgedrukte code toe om de knop toe te voegen in de MapController-methode viewDidLoad. - (void) viewDidLoad {[super viewDidLoad]; zelf. kaart overzicht. delegeren ...

Hoe u de iPhone-gebruikersinterface voor uw iOS-app maakt - dummies

Hoe u de iPhone-gebruikersinterface voor uw iOS-app maakt - dummies

Veel keer zullen iOS app-programmeurs code schrijven voor de iPad. Alle code die u voor de iPad schrijft, werkt prima voor de iPhone. Het enige wat je hoeft te doen is de volgende items toevoegen aan je storyboard-bestand op je iPhone, op een vergelijkbare manier als wat je net deed voor het storyboard van de iPad: ...

Bewerkers keuze

Nieuwe lezers aantrekken met sociale media - dummies

Nieuwe lezers aantrekken met sociale media - dummies

Als een moederblogger, door uzelf en uw sites te promoten op Twitter en Facebook is even noodzakelijk als een blog hebben. Nog niet zo lang geleden stond Facebook alleen open voor studenten, en Twitter bestond zelfs niet publiekelijk. In die tijd hebben bloggers gesocialiseerd op elkaars blogs en niet op sociale netwerken, waardoor een community werd aangemoedigd die ...

Vragen stellen voordat u een deal met een advertentienetwerk voor uw moeder tekent Blog - dummies

Vragen stellen voordat u een deal met een advertentienetwerk voor uw moeder tekent Blog - dummies

Wanneer u wordt een deel van een advertentienetwerk, u gaat er niet alleen mee akkoord om zijn advertentie-inkomsten te nemen. U gaat er ook mee akkoord om zeer specifieke dingen te leveren aan de adverteerders van het advertentienetwerk, en u moet er zeker van zijn dat u weet waar u aan begint. Het is erg belangrijk om de overeenkomst en alle vormen te lezen ...

Vermijd zwaar te zijn bij het afdwingen van online communityrichtlijnen - dummies

Vermijd zwaar te zijn bij het afdwingen van online communityrichtlijnen - dummies

, Alleen omdat je de macht hebt om Dit betekent niet dat alle online community-issues waarschuwingen en bannings vereisen. Ja, je wilt negativiteit in de kiem smoren, maar nee, je wilt er ook geen klein beetje over doen. Soms is het goed om een ​​probleem te laten schuiven. Als communitybeheerder is het jouw taak om te weten ...