#9利用 iOS SDK 各式型別生成東西,設定它的屬性和呼叫方法
這次要來練習使用別人寫的指令(function),也就是Apple 的 iOS SDK,第三方套件,提供我們開發程式會用到的功能,例如地圖、錄音。
- 地圖: MapKit,MKMapView,MKCoordinateRegion
- 播音樂: AVFoundation,URL,AVPlayer
- 播影片: AVKit,AVPlayerViewController
- 網頁: SafariServices,SFSafariViewController
- 時間: Foundation,Date,DateFormatter,Calendar,DateComponents,Void
- App 講話: AVFoundation,AVSpeechSynthesizer,AVSpeechUtterance,AVSpeechSynthesisVoice
- playground: PlaygroundSupport,PlaygroundPage,liveView,type property
首先先釐清邏輯
- 生東西/取名+型別+()
就像我們要完成一件事,要先生出 人、動作與動作內容
var number = Int()var emptyMessage = String()var cuteBaby = Baby()
例:
let speechUtterance = AVSpeechUtterance(string: “i just can’t say it to let her know i will take care of you and make you laugh”)
2.認臉
使用 iOS SDK 定義的東西,或使用第三方套件時需要加入import,讓xcode認出這個套件,在 project 裡使用自己定義的東西時則不用
例:使用 AVFoundation 這個 iOS SDK
import AVFoundation
3.生出工具
人要靠工具才能做事,於是要生出工具
例:Synthesizer合成器
let synthesizer = AVSpeechSynthesizer()
4.叫工具做事
呼叫 function speak
synthesizer.speak(speechUtterance)
程式碼全文:
import AVFoundation
let speechUtterance = AVSpeechUtterance(string: “i just can’t say it to let her know i will take care of you and make you laugh”)
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(speechUtterance)
地圖
打算利用地圖功能標記我最常去的地方,一開始為了使用顯示地圖的 MKMapView,所以必須import MapKit,另外為了在 playground 看到地圖,也須使用PlaygroundPage 的 liveView,因此也要 import PlaygroundSupport。
型別MKCoordinateRegion可控制地圖中心點的經緯度和範圍,裡面的數值分別為:
- center: 型別 CLLocationCoordinate2D,代表地圖中心點的經緯度座標。latitude 是緯度,longitude 是經度。
- latitudinalMeters: 緯度範圍,單位是公尺,傳入 500 表示地圖的最北邊 & 最南邊距離 500 公尺
- longitudinalMeters: 經度範圍,單位是公尺,傳入 500 表示地圖的最東邊 & 最西邊距離 500 公尺。
Xcode playground 的 liveView 可以顯示某個 controller 或某個 view 的畫面,讓我們不用啟動模擬器,就能在 App 畫面上操作進行互動,快速地實驗 App 的相關功能。
最後用MKPointAnnotation 加入地圖標記。
import MapKitimport PlaygroundSupport
//地圖範圍let mapView = MKMapView(frame:CGRect(x: 0, y: 0, width: 300, height: 300))mapView.region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 25.033493, longitude: 121.564101), latitudinalMeters: 1000, longitudinalMeters: 1000)PlaygroundPage.current.liveView = mapView
//地圖標記let Taipei101 = MKPointAnnotation()Taipei101.title = “台北101”Taipei101.coordinate = CLLocationCoordinate2D(latitude: 25.033493, longitude: 121.564101)Taipei101.subtitle = “台灣難波萬”mapView.addAnnotation(Taipei101)
播音樂
AVFoundation :播放音樂元件
加入URL :音樂播放網址
import AVFoundationlet url=URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/e7/ba/51/e7ba51e4-11ae-da4b-5ee3-e2550c14dd3c/mzaf_14379985924893258217.plus.aac.p.m4a")let player=AVPlayer(url: url!)player.play()
播放影片
AVKit :播放影片
PlaygroundSupport :讓playground可以顯示view
import AVKitimport PlaygroundSupportlet url = URL(string: "https://movietrailers.apple.com/movies/marvel/black-widow/black-widow-big-game-spots_h480p.mov")let player=AVPlayer(url: url!)let controller = AVPlayerViewController()controller.player = playerPlaygroundPage.current.liveView = controllerplayer.play()
顯示網頁
SafariServices → 開啟safar (沒有google服務),連到我的粉專。
import SafariServicesimport PlaygroundSupportlet url = URL(string: “https://www.facebook.com/A4concept")let controller = SFSafariViewController(url: url!)PlaygroundPage.current.liveView = controller
列印時間
利用Foundation 定義時間的項目,Date() 代表現在的時間(英國時區),在addTimeInterval()的括號中加上數字,代表增加的秒數。
import Foundationvar time = Date()print(time)time.addTimeInterval(100)print(time)
將時間變成特定格式的字串
DateFormatter 可設定時間顯示的格式,yyyy,MM,dd 等時間格式的說明,可參考以下連結:
import Foundationlet now = Date()let dateFormatter = DateFormatter()dateFormatter.dateFormat = “MM/dd/yyyy”let dateString = dateFormatter.string(from: now)
取得今天幾月幾號
利用 Calendar.current 取得現在的月曆,然後呼叫它的 function dateComponents。
import Foundationlet today = Date()let dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: today)let month = dateComponents.monthlet day = dateComponents.day
其他DateComponents 資料:
讓App 講話
在AVSpeechUtterance 打上要講的話,AVSpeechSynthesisVoice 可以控制講話聲音的語言,AVSpeechSynthesizer 是發出聲音的合成器。
speechUtterance.rate可以調整講話速度,speechUtterance.pitchMultiplier可以調整講話的音調。
import AVFoundationlet speechUtterance = AVSpeechUtterance(string:”就是開不了口,讓她知道。我一定會呵護著妳,也逗妳笑。”)speechUtterance.voice = AVSpeechSynthesisVoice(language: “zh-TW”)speechUtterance.rate = 0.5speechUtterance.pitchMultiplier = 1let synthesizer = AVSpeechSynthesizer()synthesizer.speak(speechUtterance)
參考資料: