일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 영문 개인정보처리방침
- 서체관리자
- CoreLocation
- Xcode
- RunningTimer
- 클로저의 캡슐화
- UIAlertAction
- 단일 책임원칙
- dispatchsource
- 러닝기록앱
- 한국어 개인정보처리방침
- font book
- WeatherManager
- Protocol
- App Store Connect
- 러닝타이머
- MKMapItem
- Required Reason API
- addannotation
- weak var
- swift
- UICollectionViewFlowLayout
- Timer
- MKMapViewDelegate
- weatherKit
- SwiftUI Boolean 값
- AnyObject
- CLLocationManagerDelegate
- xcode로 날씨앱 만들기
- Startign Assignments
- Today
- Total
VesselWheel
MapView 본문
//
// ViewController.swift
// lecture 09 MapView
//
// Created by Jason Yang on 10/17/23.
//
import UIKit
import MapKit
class ViewController: UIViewController, CLLocationManagerDelegate {
// ㄴ 지도 보이기 delegate
@IBOutlet var myMap: MKMapView!
@IBOutlet var lbLocationInfo1: UILabel!
@IBOutlet var lbLocationInfo2: UILabel!
// let locationManager = CLLocationManager() // 지도 보이기 변수
let locationManager = CLLocationManager()
// 앱 실행 시 지도 표시 코드
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
lbLocationInfo1.text = "" //위치 정보를 표시할 레이블에는 아직 특별히 표시할 필요 없어 공백으로 대기
lbLocationInfo2.text = "" //위치 정보를 표시할 레이블에는 아직 특별히 표시할 필요 없어 공백으로 대기
locationManager.delegate = self //locationManger의 위임자를 self로 설정
locationManager.desiredAccuracy = kCLLocationAccuracyBest //지도 정확도 최고로 지정
locationManager.requestWhenInUseAuthorization() //위치 데이터의 사용자 승인 요청
locationManager.startUpdatingLocation() //위치 업데이트
myMap.showsUserLocation = true //위치값을 표시하기 위한 true값 설정
}
func goLocation(latitudeValue: CLLocationDegrees, longitudeValue : CLLocationDegrees, delta span : Double) {
let pLocation = CLLocationCoordinate2DMake(latitudeValue, longitudeValue)
let spanValue = MKCoordinateSpan(latitudeDelta: span, longitudeDelta: span)
// span 범위 값을 매개변수로 하여 MKCoordinateSpanMake 함수 호출, 리턴 값을 spanValue로 받는다. span : 기간
let pRegion = MKCoordinateRegion(center: pLocation, span: spanValue) // pLocation and spanValue 값을 매개변수, MKCoordinateRegionMake 함수를 호출하여 리턴 값을 pRegion으로 받는다.
myMap.setRegion(pRegion, animated: true) //pRegion 을 매개변수로 하여 myMap.setRegion 함수를 호출
}
//last location present
func locationManager(_ manager : CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let pLocation = locations.last // 마지막 위치 값
goLocation(latitudeValue: (pLocation?.coordinate.latitude)!, longitudeValue: (pLocation? .coordinate.longitude)!, delta: 0.01)
//goLocation(latitudeValue: (pLocation?.coordinate.latitude)!, longitudeValue: (pLocation?.coordinate.longitude)!, delta: 0.01)
// delta값은 지도의 크기 지정, 값이 작을 수록 확대되는 효과 0.01은 1의 값보다 지도를 100배로 확대해서 볼 수 있는 것.
CLGeocoder().reverseGeocodeLocation(pLocation!, completionHandler: {
(placemarks, error) -> Void in
let pm = placemarks!.first
let country = pm!.country
var address:String = country!
if pm!.locality != nil {
address += " "
address += pm!.locality!
}
if pm!.thoroughfare != nil {
address += " "
address += pm!.thoroughfare!
}
self.lbLocationInfo1.text = "current loaction"
self.lbLocationInfo2.text = address
//self class or structure의 자기자신을 가리킨다.
})
locationManager.stopUpdatingLocation()
}
@IBAction func segChangeLocation(_ sender: UISegmentedControl) {
}
}
'Xcode Study' 카테고리의 다른 글
e-mail / pw 입력창 (1) | 2023.10.18 |
---|---|
@State (0) | 2023.10.18 |
rbenv for cocoa pods (0) | 2023.10.18 |
버튼 기능 구현하기 by ContentView (0) | 2023.10.17 |
scaledToFit: 이미지의 가로나 세로가 긴 쪽이 프레임의 테두리(border)에 닿으면 크기가 정해짐 (0) | 2023.10.16 |