iOS
Swift
playground
Swift3.0
Xcode8

【初心者向け】Swift3で爆速コーディングその6(地図とタイマー)

More than 1 year has passed since last update.

Playgroundによるコーディングです。
初めての方は下記をご参考ください。

第1回:【初心者向け】Swift3で爆速コーディングその1(画面作成とSnippetsの使い方)
第2回:【初心者向け】Swift3で爆速コーディングその2(UIViewと文字表示)
第3回:【初心者向け】Swift3で爆速コーディングその3(ボタンクリックとイベント)
第4回:【初心者向け】Swift3で爆速コーディングその4(画像とアニメーション)
第5回:【初心者向け】Swift3で爆速コーディングその5(サウンドとデリゲート)

ソースコード

全ソースコードです。

import UIKit
import MapKit

class ViewController: UIViewController,MKMapViewDelegate {

    var cnt:Double = 0
    var mapView : MKMapView!
    var coordinate: CLLocationCoordinate2D!

    override func viewDidLoad() {
        super.viewDidLoad()


        // MapViewの生成
        mapView = MKMapView()
        mapView.frame = self.view.bounds
        // Delegateを設定
        mapView.delegate = self
        self.view.addSubview(mapView)

        // 中心点の緯度経度
        let lat: CLLocationDegrees = 35.681298
        let lon: CLLocationDegrees = 139.766247
        coordinate = CLLocationCoordinate2DMake(lat, lon)

        // 縮尺
        let latDist : CLLocationDistance = 10000
        let lonDist : CLLocationDistance = 10000

        // 表示領域を作成
        let region: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, latDist, lonDist);

        // MapViewに反映
        mapView.setRegion(region, animated: true)

        // タイマーを作る
        Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.onUpdate(_:)), userInfo: nil, repeats: true)

    }


    // scheduledTimerで指定された秒数毎に呼び出されるメソッド.
    func onUpdate(_ timer : Timer){

        cnt += 100.0

        //桁数を指定して文字列を作る.
        let str = "Time:".appendingFormat("%.1f",cnt)
        print(str)


        // 縮尺
        let latDist: CLLocationDistance = 1000 + cnt
        let lonDist: CLLocationDistance = 1000 + cnt


        // 表示領域を作成
        let region: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, latDist, lonDist);

        // MapViewに反映
        mapView.setRegion(region, animated: true)


    }

    // Regionが変更された時に呼び出されるメソッド
    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {

        print("regionDidChangeAnimated")
    }


    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

let viewController = ViewController()
viewController.view.backgroundColor = UIColor.white


import PlaygroundSupport


PlaygroundPage.current.liveView = viewController
PlaygroundPage.current.needsIndefiniteExecution = true

プレビュー

一定時間おきに地図を縮尺します。

スクリーンショット 2016-09-27 23.23.55.png

地図

地図を表示するにはMapKitフレームワークとMKMapViewDelegateを使います。
デリゲートに関しては第5回を参考にしてください

// MapViewの生成
mapView = MKMapView()
mapView.frame = self.view.bounds
// Delegateを設定
mapView.delegate = self
self.view.addSubview(mapView)

// 中心点の緯度経度
let lat: CLLocationDegrees = 35.681298
let lon: CLLocationDegrees = 139.766247
coordinate = CLLocationCoordinate2DMake(lat, lon)

// 縮尺
let latDist : CLLocationDistance = 10000
let lonDist : CLLocationDistance = 10000

// 表示領域を作成
let region: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, latDist, lonDist);

// MapViewに反映
mapView.setRegion(region, animated: true)

タイマー

タイマーを作成するにはTimerクラスのscheduledTimerメソッドを使います。

// タイマーを作る
Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.onUpdate(_:)), userInfo: nil, repeats: true)

タイマーのメソッドで一定時間おきに地図を拡大させます。

// scheduledTimerで指定された秒数毎に呼び出されるメソッド.
func onUpdate(_ timer : Timer){

        cnt += 100.0

        //桁数を指定して文字列を作る.
        let str = "Time:".appendingFormat("%.1f",cnt)
        print(str)


        // 縮尺
        let latDist: CLLocationDistance = 1000 + cnt
        let lonDist: CLLocationDistance = 1000 + cnt


        // 表示領域を作成
        let region: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, latDist, lonDist);

        // MapViewに反映
        mapView.setRegion(region, animated: true)

}