Day 68 / 100
I know, I am hopelessly late in the program but I really cannot do what Paul says, one hour a day and that’s it, it is just not enough for me. The curriculum is really too hard for people who do not come from a technology background to be done in 100 or so hours.
It needs more time and I am doing every day minimum 1.5-2 hours and still, I am lagging behind.
The program for Day 60 is
MK stands for MapKit and CL could be CoreLayer or CoreLocation as far as I know.
Let’s create a new Single View iOS App and, in the Storyboard, embed the view controller in Navigation Controller (Editor > Embed In > Navigation Controller). Then drag a Map Kit View from the Object Library down on the canvas and make it stretch to occupy all our screen. Use the Editor > Resolve Auto-Layout Issues > Add missing constraints command to automatically add all the necessary constraints.
Up and running with MapKit
Let’s create an outlet from the map view called
mapView and set the view controller to be the delegate of the map view. Also
import MapKit in ViewController.swift.
Now create a new Cocoa Touch Class, subclass of
NSObject called “Capital”. Make it conform to the
MKAnnotation protocol and give it three properties: an optional string title, a
CLLocationCoordinate2D coordinate and an info string. Set the initialiser and go back to ViewController.swift. For the curious like me here is a taste of what the
MKAnnotation protocol looks like:
viewDidLoad initialise five capital cities as in the given code. Then add a call to
mapView.addAnnotations() and, inside those square brackets, add the five cities.
Annotations and accessory views:
First of all make the ViewController class conform to
MKMapViewDelegate (we have already done this in the storyboard but this is necessary for code completion to work). Second, be sure that the annotation parameter is a
Capital object, otherwise just exit from the method. Third, define a reuse identifier “Capital” (or whatever best fits) and dequeue it from the list of the map-view’s unused views. Fourth, if there is not an annotation found, create a new one using assigning the result of the call to
MKPinAnnotationView(annotation:reuseIdentifier:) to the annotation view and allow it to show the callout. The
canShowCallout property is a Boolean value indicating whether the annotation view is able to display extra information in a callout bubble. Fifth, create a new detail disclosure type button and assign it to the right callout accessory view property of the annotation view. Sixth, if a view can be reused, it should be updated to use the annotation passed in to the method.
This last part is not completely clear to me. Where did we set the identifier to be “Capital” elsewhere? Apparently nowhere. So how is the code connecting to an annotation that doesn’t exist? Also, we are not calling this method anywhere so I really do not understand how this is working and, sadly, I just have to copy the code and move on. Fine…
At the end of the method call the
return annotationView line.
Regardless of whether you understood this last part or not (it seems that this is not important and that to become a programmer you just need to be a mindless automated being that just repeats things without any creativity in mind) move on and add the
Make sure that the view’s annotation is of type
Capital. Store the title and info in two constants and create an alert controller to show the title as title and the info as message.
You can find the code for this project here.
Thanks for reading!
Till the next one!
If you like what I’m doing here please consider liking this article and sharing it with some of your peers. If you are feeling like being really awesome, please consider making a small donation to support my studies and my writing (please appreciate that I am not using advertisement on my articles).
If you are interested in my music engraving and my publications don’t forget visit my Facebook page and the pages where I publish my scores (Gumroad, SheetMusicPlus, ScoreExchange and on Apple Books).
You can also support me by buying Paul Hudson’s books from this Affiliate Link.
Anyways, thank you so much for reading!
Till the next one!