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

1.用 AVPlayer 播音樂

找到播放mp3的網站

搜尋Kelly Clarkson 凱莉克萊森的勵志歌曲“Stronger”

開網頁原始碼,搜尋mp3,找mp3的網址連結(這已經算很好找了)

貼到string上

import UIKit
import AVFoundation
import AVFAudio

//Kelly Clarkson (凱莉克萊森)的Stronger
let url = URL(string: "https://media85.melon365.com/other/2016/9-19/mp35147038723eca2b8795554cb4a7f0c88f9de2ecf085.mp3")
let player = AVPlayer(url: url!)
player.play()

可以撥出聲音的Xcode真是令人感到開心,因為前幾天遇到soundflower和Xcode衝到,變成沒聲音的Xcode,搞了快兩天才解決。

2.用 AVPlayerViewController 播影片

因為現在網站技術很少單獨直接撥放mp4或m4a的影片連結,而且網址也都會隱藏起來,越來越難找,所以只好用教材這個比較快,不然花了很多時間在找影片連結。

有些影片剛好可以按右鍵直接有影片連結(真的非常少),貼上來就好,不然其他網站看程式碼找了半天還是找不到連結

import PlaygroundSupport
import AVKit

let url = URL(string: "https://www.adsoftheworld.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBMU1pRHc9PSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--e4db3794e1aa7b2ce5ec099621668cb0963209a9/Pizza%20Pizza%20Dip%20Keg%20social%20video.mp4")
let player = AVPlayer(url: url!)
let controller = AVPlayerViewController()
controller.player = player
PlaygroundPage.current.liveView = controller
player.play()

3.利用 SFSafariViewController 顯示網頁

import SafariServices
import PlaygroundSupport

let urlweb = URL(string: "https://www.gamer.com.tw")
let controller = SFSafariViewController(url: urlweb!)
PlaygroundPage.current.liveView = controller

4.顯示地圖的地標(MapKit,MKMapView,MKCoordinateRegion):

import UIKit
import AVKit
import MapKit
import AVFoundation
import PlaygroundSupport
import SafariServices
import AVFAudio


let Mapview = MKMapView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
let taipei101 = MKPointAnnotation()
taipei101.title = "台北101"
taipei101.coordinate = CLLocationCoordinate2D(latitude: 25.033649, longitude: 121.564824)
taipei101.subtitle = "台灣最高建築"


let tradeCanter = MKPointAnnotation()
tradeCanter.title = "台北世貿中心"
tradeCanter.subtitle = "多功能工商會展中心"
tradeCanter.coordinate = CLLocationCoordinate2D(latitude: 25.033867, longitude: 121.562325)

//兩個景點用陣列的方式show在地圖上
let POI = [taipei101, tradeCanter]
Mapview.addAnnotations(POI)

5.列印時間

練習題一:計算距離現在3小時50分20秒的時間。

//計算距離現在3小時50分20秒的時間。
let timeInterval:Double = 3*60*60+50*60+20
var time = Date()
print(time)
time.addTimeInterval(timeInterval)

練習題二:取得今天年份的數字。

練習題三:取得今天星期幾的數字。

let today = Date()
let dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: today)
//顯示現在的年
let year = dateComponents.year
//顯示現在的月
let month = dateComponents.month
//顯示現在的日
let day = dateComponents.day
//顯示現在 從週日算第一天到現在 這不是星期幾
let weekday = dateComponents.weekday


let now = Date()
print(now)
let dateFormatter = DateFormatter()
//Wednesday, Aug 28, 2024 = EEEE, MMM d, yyyy 只好用這個顯示星期幾
dateFormatter.dateFormat = "EEEE"
let datesting = dateFormatter.string(from: now)

因為那個星期幾這題也搞了很久。

6.使用 AVSpeechSynthesizer 講話

因為只叫講一句話蠻無聊的,想到N年前有一部經典廣告台詞,剛好很適合來試試看。

import AVFAudio

let utterance = AVSpeechUtterance(string:
"我說...人為什麼要拍照? 人活得好好的他為什麼要拍照?喔..到底是為了要回味兒回什麼味兒?回自己的味兒 回自己和大家生活的味兒 回經歷和體驗的味兒 回感受深刻的味兒 回悲歡離合喜怒哀樂的味兒什麼樣的照片才叫好呢? 拍得漂亮 拍得瀟灑 拍得清楚 拍得得意 拍得精彩 拍得出色 拍得深情 拍得智慧 拍得天真浪漫返樸歸真 拍得喜事連連無怨無悔 拍得恍然大悟破鏡重圓 拍得平常心是道 拍得日日好日 年年好年 如夢似真 止於至善!我的天啊!什麼軟片這麼好啊?啪啦!KONICA COLOR!它抓得住我 一次OK!")
utterance.voice = AVSpeechSynthesisVoice(language: "zh-TW")
utterance.rate = 0.6
//速度
utterance.pitchMultiplier = 1.4
//音調0.5-2
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)

語速要再快都可以,調0.8更像,不知道有沒有可以調偏男性的聲音。

心得:

  1. 本次作業多災多難,舊電腦有些跑不動,有遇到程式衝到的問題,跑地圖又時常跑不出來,不過後續還是順利解決了。希望9月Macbook Pro M4可以趕快推出新機。
  2. 程式還要花點時間熟練一下,這真的要花點時間了。

--

--