Reputation: 975
Good to see a tag for swift-playground - love to see this continue.
I've been tinkering with Swift and am wondering whether the MapKit can be used in the playground so that you can use the Quick Look feature so I can iterate and play around with a preview of my work. I haven't figured out the syntax so thought I would ask if anyone has explored this in a playground environment. I am thinking I need some code to establish it as a view controller.
import UIKit
import MapKit
// Sample UIView code which works great in the playground.
//var myView:UIView = UIView();
//myView.frame = CGRectMake(0, 0, 320, 560)
//myView.backgroundColor = UIColor.blueColor()
// Non working map code - no errors but can't figure out what to call or initiate to get the view in the Quick Look side.
var mapView = MKMapView();
mapView.region.center.latitude = mapView.userLocation.coordinate.latitude;
mapView.region.center.longitude = mapView.userLocation.coordinate.longitude;
mapView.region.span.latitudeDelta = 0.00725;
mapView.region.span.longitudeDelta = 0.00725;
Guessing I am just missing something simple for the mapView to init itself etc. I love the interpreted playground area for tinkering around, just need to figure out if it can do mao functionality as opposed to just writing .swift files and environment within Xcode and getting more formal.
Upvotes: 24
Views: 10572
Reputation: 3243
For XCode7.1 and Swift2.1 on OS X, I opened the timeline and did the following:
import MapKit
import XCPlayground
let delta = 5.0
let frame = CGRect( x:0, y:0, width:200, height:200 )
let mapView = MKMapView( frame: frame )
var region = MKCoordinateRegion()
region.center.latitude = 31.0
region.center.longitude = -110.0
region.span.latitudeDelta = delta
region.span.longitudeDelta = delta
mapView.setRegion( region, animated: true )
XCPlaygroundPage.currentPage.liveView = mapView
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
Xcode 9.x, Swift 4.1 update:
import PlaygroundSupport import MapKit
let delta = 5.0
let frame = CGRect( x:0, y:0, width:200, height:200 )
let mapView = MKMapView( frame: frame )
var region = MKCoordinateRegion()
region.center.latitude = 31.0
region.center.longitude = -110.0
region.span.latitudeDelta = delta
region.span.longitudeDelta = delta
mapView.setRegion( region, animated: true )
PlaygroundPage.current.liveView = mapView
PlaygroundPage.current.needsIndefiniteExecution = true
Upvotes: 8
Reputation: 21
I try this in Swift Playground App, I just some few modifications and add one line of your code. My swift playground app is using Swift 3.1. I wish I could upload a video, in this mapview I can zoom in and out plus I can move around in the map. https://i.sstatic.net/XVqPg.jpg
import UIKit
import PlaygroundSupport
import MapKit
var myView:UIView = UIView()
myView.frame = CGRect(origin: CGPoint (), size: CGSize(width: 320, height: 568))
var mapView = MKMapView();
mapView.region.center.latitude =
mapView.userLocation.coordinate.latitude
mapView.region.center.longitude =
mapView.userLocation.coordinate.longitude
mapView.region.span.latitudeDelta = 0.00725
mapView.region.span.longitudeDelta = 0.00725
myview.addSubview(mapView)
PlaygroundPage.current.liveView = mapView
PlaygroundPage.current.needsIndefiniteExecution = true
Upvotes: 2
Reputation: 20564
Try this:
import UIKit
import MapKit
import XCPlayground // Required for XCPShowView
let frame = CGRect(x: 0, y: 0, width: 150, height: 150)
let mapView = MKMapView(frame: frame)
mapView.region.center.latitude = 37.3347606
mapView.region.center.longitude = -122.0548883
mapView.region.span.latitudeDelta = 0.00725
mapView.region.span.longitudeDelta = 0.00725
XCPShowView("mapview", mapView)
Upvotes: 4