#9利用 iOS SDK 各式型別生成東西,設定它的屬性和呼叫方法

Photo by
Mailchimp on Unsplash

這次要來練習使用別人寫的指令(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

首先先釐清邏輯

  1. 生東西/取名+型別+()

就像我們要完成一件事,要先生出 動作動作內容

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)

參考資料:

--

--