Tabbed Application 탬플릿 기반의 프로젝트를 생성하여 미리알림과 위치알림을 세팅하는 테스트 앱을 만들어본다.
mainStorayboard 에서 첫번째 탭 UI 는 텍스트필드, 버튼, 데이트피커 세개의 오브젝트를 만들고 컨트롤러와 연결한다.(시간알림사용UI)
두번째 탭 UI는 텍스트필드와 버튼 두개의 오브젝트를 만들고 컨트롤러와 연결한다.(위치알림사용UI)
AppDelegate.swift 파일에 아래와같이 eventKit 을 import 하고 eventStore 변수를 선언해준다.
import UIKit
import EventKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var eventStore : EKEventStore?
.
.
.
FirstViewController.swift 파일의 소스코드
import UIKit
import EventKit
class FirstViewController: UIViewController {
@IBOutlet weak var reminderText: UITextField!
@IBOutlet weak var myDatePicker: UIDatePicker!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
@IBAction func setReminder(sender: AnyObject) {
if appDelegate.eventStore == nil {
appDelegate.eventStore = EKEventStore()
appDelegate.eventStore?.requestAccessToEntityType(EKEntityType.Reminder, completion: {(granted, error) in
if !granted {
print("Access to store not grated")
print(error?.localizedDescription)
} else {
print("Access grated")
}
})
}
if (appDelegate.eventStore != nil) {
self.createReminder()
}
}
func createReminder() {
let reminder = EKReminder(eventStore: appDelegate.eventStore!)
reminder.title = reminderText.text!
reminder.calendar = appDelegate.eventStore!.defaultCalendarForNewReminders()
let date = myDatePicker.date
let alarm = EKAlarm(absoluteDate: date)
reminder.addAlarm(alarm)
do {
try appDelegate.eventStore?.saveReminder(reminder, commit: true)
} catch let error as NSError {
print("Reminder failed with error \(error.localizedDescription)")
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
reminderText.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
SecondViewController.swift 의 소스코드
import UIKit
import EventKit
import CoreLocation
class SecondViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var locationText: UITextField!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
//var appDelegate : AppDelegate?
var locationManager : CLLocationManager = CLLocationManager()
@IBAction func setLocationReminder(sender: AnyObject) {
if appDelegate.eventStore == nil {
appDelegate.eventStore = EKEventStore()
appDelegate.eventStore?.requestAccessToEntityType(EKEntityType.Reminder, completion: {(granted: Bool, error: NSError?) in
if !granted {
print("Access to store not grated")
} else {
print("Access grated")
}
})
}
if (appDelegate.eventStore != nil) {
locationManager.requestLocation()
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let reminder = EKReminder(eventStore : appDelegate.eventStore!)
reminder.title = locationText.text!
reminder.calendar = appDelegate.eventStore!.defaultCalendarForNewReminders()
let location = EKStructuredLocation(title: "Current Location")
location.geoLocation = locations.last
let alarm = EKAlarm()
alarm.structuredLocation = location
alarm.proximity = EKAlarmProximity.Leave
reminder.addAlarm(alarm)
do {
try appDelegate.eventStore?.saveReminder(reminder, commit: true)
} catch let error as NSError {
print("Reminder failed with error \(error.localizedDescription)")
}
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("failed to get location: \(error.localizedDescription)")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationManager.requestWhenInUseAuthorization()
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
info.plist 파일에 알림접근 권한에 대한 메시지 키-값 추가
위의 코드는 "핵심만 골라 배우는 ios 9 프로그래밍 (닐스미스 지음/ 황반석 옮김)" 에 있는 예제를 참고하여 작성하였습니다.
'programming language > swift' 카테고리의 다른 글
ios AVPlayer , 비디오 플레이 사용하기 in swift (0) | 2016.09.12 |
---|---|
ios 카메라, 포토라이브러리 사용하기 in swift (0) | 2016.09.12 |
ios photo extensions 사용하기 in swift (0) | 2016.09.11 |
ios 위치정보 가져오기 in swift (0) | 2016.09.09 |
ios MKMapItem 지도 사용하기 길찾기 in swift (0) | 2016.09.09 |