Translate

2017年10月28日 星期六

歌曲知識王更新到 V1.1.9 了

進入 App Store 下載

App Store 連結:
https://itunes.apple.com/tw/app/id1273605195


V1.1.9 更新內容:
針對 iPhoneX 做 UI 的優化
同時,結算頁還可以重聽一次題目

 這是遊戲的 Demo 影片,
             



現在有的題庫分別是 華語歌曲、台語歌曲、粵語歌曲、以及世界排名歌曲。

預計未來會增加各種特色曲目的題庫。

有興趣的人可以下載來看看唷。

中文版粉絲團:
https://www.facebook.com/%E6%AD%8C%E6%9B%B2%E7%9F%A5%E8%AD%98%E7%8E%8B-1778810945751055/

英文版粉絲團:
https://www.facebook.com/KingOfSongQuiz/

2017年9月23日 星期六

一個 typo ,讓整個 database 混亂了

分享一個開發時候沒注意到的小事,最後導致了 database 裡面資料混亂的事。

https://goo.gl/G3MSjg

 連結是「歌曲知識王」,一個自製的 iOS App 遊戲。

 當初在設定做使用者的資料結構時,在某一項 key 值中多打了一個 e。

可是另一頁的同樣資料,他 key 值卻沒有打錯。

2017年9月15日 星期五

iOS 遊戲 App - 猜歌之王 King of Song Quiz

這是一個猜歌的 App

進入 App Store 下載

App Store 連結:
https://itunes.apple.com/tw/app/id1273605195

螢幕截圖:

他是個猜歌遊戲

現在是 v1.1.6

有在看這個版的朋友,麻煩廣一下

玩法很簡單,選擇題庫後,倒數三秒開始猜歌

每一首歌都有30秒內的試聽曲

在愈短時間內猜出,得分愈高

現在有的題庫分別是 華語歌曲、台語歌曲、粵語歌曲、以及世界排名歌曲。

預計未來會增加各種特色曲目的題庫。

有興趣的人可以下載來看看唷。

中文版粉絲團:
https://www.facebook.com/%E6%AD%8C%E6%9B%B2%E7%9F%A5%E8%AD%98%E7%8E%8B-1778810945751055/

英文版粉絲團:
https://www.facebook.com/KingOfSongQuiz/





2017年5月8日 星期一

Swift & xcode 學習歷程 part6 - nil 和 optional



1> Swift 的語言裡面,有大量的驚嘆號。要了解驚嘆號,就要先知道 nil。nil 就是什麼都沒有,即使這個變數是 int,或是 double,他也可以是nil。nil 自己一個型別,獨立的一個。

2> 再看 Optional, 而為了向下相容 objective-c。所以他設定了 Optional。在早期的 obj-c裡面,在一個 function 執行,而他在執行的時候,如果需要回傳某個結果。假設是 int,如果這個程式是算的出來的,他就會回傳結果,但是有時候你會遇到算不出來的時候。此時會回傳 nil,不是回傳其他任何 type。

3> 但 swift 的語言架構,和 obj-c 是不一樣了,所以為了向下相容,所以他創造了一個 data type,叫做 Optional。使用的方式,就是加上問號。這就是相當於一個包裝,把某個變數包在裡面。讓他能出現 nil。

4> 所以當變數在做互相運算的時候,他一定要解開,因為 nil 的運算是有可能讓你的 app 炸掉。而解開的方法,有兩種

4.a> Optional binding, if let {}
或是
4.b> !

舉例來說:
Optional Chaining
UILabel?.text = “123”

這個 UI 是會先被檢查是不是 nil。如果是 nil ,這一行跳過,則不執行。如果己經不是 nil,就會執行。

if let 寫太多,事實上很差,如果你裡面有四個變數,那你就會出現四個 if let,會變成波動拳程式碼。

所以 swift 2.0 有加一個功能。

if let plustNText = plustNfield.text, let n = sth , let m = sth {
//這樣一次就可以解開四個變數
}



5> MVC  一種軟體開發的設計模式 Model, View, Controller.

Model:
軟體中的資料。通訊錄中的聯絡人“Line 的對話紀錄、遊戲裡面的排行榜分數。在我們的計數器裡面,他的變數名是 counter.

View
直接面對使用者

Controller.
負責控制Model和View之間的溝通,管理運算,可以想像成大腦

View Controller
通常控制一整個 App頁面,他是 App頁面的「大腦」
通常會有非常非常多行的code。
真的有必要的時候可以把部分的東西切分出來到獨立的 controller

----溝通方式-----
6> Outlet
Controller 藉由 outlet  來對 view 物件進行動作,所以 outlet 會設定為 controller 的屬性。

Target-action
當 view 物件發生特定事件 (event) 的時候會啟動。


7> 特別注意
AutoLayout & UIStckView
同步與非同步處理> 同步: 馬上程式會跑。 非同步: 按下去後,要等。
MKDirections

8> Auto Layout 一原點是在左上角

(0,0) (w,0)

(0,h) (w,h)

h和w 都是正值


9> Missing constraints > 沒有定義完成會出現的 errMsg
Misplaced views  > 運算完的 view 和 實際大小可能不同。


10> 在 iOS9 新增了 UIStackView

在元件欄裡面
事實上還有一個 Vertical Stack View,可以裡面再塞基他的 label 或 slider 或 view。然後,他可以用 Fill 的方式,或是 equally distribution,你還可以用 spacing 去調整。這是一個很快做 layout  的方法。

2017年4月12日 星期三

Swift & xcode 學習歷程 part5 - 各種線上資源

Swift & xcode 學習歷程 part5 - 各種線上資源
1> 如果沒有靈感的話,可以去  coacoacontrols.com 去找,他連圖案都有,而且有附上GitHub連結。如果看到喜歡的,就去 GitHub 上,直接參考別人的程式碼怎麼寫。

2> 另一個教學網站, raywnderlich.com/
這個也可以,他有各種教學,也有各種 UI/UX 排版,動畫,特效。

3> xcode 原生支援 GitHub, svn. 在Xcode一打開的選項裡面,就可以找版控的。

4> 有各種模板,最簡單的當然就是 single view。

4-a> Master-Detail application. 這種 app,就像 mail,點左邊,右邊出現內文或細項。

4-b> Page-Based app: 就像 iphone 的主畫面。有多頁

4-c> Tabbed app: 就像 fb 那一樣,最下面會有一排 「 tab」 他有各種不同的畫面

4-d> Message App: 針對 iMessage.

2017年4月6日 星期四

Swift & Xcode 學習歷程 - Part 4 做出計算機的 model

Swift & Xcode 學習歷程 - Part 4 做出計算機的 model

1> 新建一個新的 swift 檔案,這個檔案就是 model。因為 lec 1 的內容,是把 sqrt 寫在 controller 裡面,pi 也寫在 controller 裡面。如果依照 MVC 的原則,運算符號的功能應該要切開比較好。

2> 新建的swift檔,並不需要 UIKit,只要 import Foundation,因為這個檔是 UI in dependent。

3> 在這個運算 model 裡面,是不用 class 的,這裡用 struct。

4> struct 並不是 ref type。 但 class 是 ref type。另一重點, struct 不用 initialize,這個是自動處理的。

2017年4月5日 星期三

Swift & Xcode 學習歷程 - Part 3 MVC

Swift & Xcode 學習歷程 - Part 3 MVC

講師建議所有的 iOS 都要使用 MVC 架構,即所謂的 Model, View, Controller。之所以分這些陣營,就是希望 app 在內部傳遞各種訊號的時候,團隊的各開發者仍然可以清楚他們之間的溝通管道。

1> Controller 可以直接送訊息給 model,沒有任何限制。 Controller 送訊息給 view 也沒有任何限制。

2> Model 和 view 之間是不能互相送訊息的。這類的訊息傳遞是不行直接發生的。

3> View 如果要送訊息給 Controller,如果是一個 UIBotton,可以想成是有一個 target 在 controller 裡, view 的動作就是直接射到那個 target。 而 ScrollView 則是一種「同步」的概念,裡面的資料則是用 delegate 的方式,讓 view 的資訊和 controller 同步。

4> view 是不擁有任何資料的,他只能 show 資料,這些資料都不寫在 view 的 class 裡面。舉例來說,如果你的 iPod 裡面有一千首歌曲,你要做個 list,而存放一份資料在 library 裡面,又一份放在 view 的 class 裡面,你就會有兩份資料。這不儘儘是效率的問題,而是這樣的設計概念是不好的。

5> 而 view 拿取資料的方式,則是用 data source 的方式,回去要求 controller 給資料。他也不一定一次要拿1000首歌曲的資料,也可以一次只要求10 首歌曲,如果使用者要後面的歌曲,則是之後再request 一次歌曲資料。

6> model 是 UI independent  的,所以他並不直接傳遞訊息給 controller。他用的是「廣播」的方式,而 controller 則是接收到訊號後,才會知道 model 有被更動過。


7> 這三個陣營是壁累分明的,因為這一套溝通系統一混亂 ,裡面所有的class 的溝通會全部亂成一團,這會讓其他成員相當難維護 code。

2017年4月4日 星期二

Swift & Xcode 學習歷程 - Part 2 先做一個 single view app

Swift & Xcode 學習歷程 - Part 2 先做一個 single view app

在台大資訊系統訓練班開始之前,看到資策會有開一個 ios app 的介紹課程,心寫來潮就報名了。講課的老師是一個常常出 iOS書的老師,現在常常接家教。

以下是節錄上課的內容。

1>  app 的 icon,可以放兩張圖,大小要放到 60 pt。

2> 做一個 single view app,可以單純用 view 來拉。而圖層的概念可以和 powerpoint 的圖層是相同的邏輯。

3> 左方的檔案列表中,可以看到圖層上下關係,也可以在這邊調整圖層。

4> 這一堂課,只有3小時,所以我們唯一能完成的 app ,就是完全不寫 code 在裡面的 app。

5> 不寫code app 是真的做得到的,而據講師所說,他為了教學試範,還真的嘗試上架這樣的 app,而且還真的上架成功。

6> 一個頁面,就是一個 viewController 去控制,如果你想要多加下一個畫面,就是加一個 viewController. 

7> 在 viewController 裡面,有一個 init 的選項,這個選項,決定了當使用者點進你的 app,一開始到底秀了什麼東西給使用者。當你所有的 viewController都沒有 init,那使用者點進去 app,就會是一片黑暗。

8> 一個任何 code 都不用寫的 app,最簡單就是介紹 xx 的app,而要讓使用者按下後能切換頁面。一開始先用 imageViewer 把圖案塞進去,然後再放一個隱形的 Button 在圖案上面。然後再用神奇的拉線 Segue 把這一頁連接到下一頁,這樣,你就能不寫任何一行 code ,就做出 app。

9> 另一種內建的換頁方式,就叫做  Navigator bar。最基本的款示就是  iOS 的 Setting 設定。他的想法就是一頁進來後,會蓋在上面那一頁,然後按「返回」,上面那一頁就會拿掉,回到前一頁。


2017年4月2日 星期日

Swift & Xcode 學習歷程 - Part 1 初探 Xcode 與 Swift

Swift & Xcode 學習歷程 - Part 1 初探 Xcode 與 Swift

在 Stanford CS193 的課程裡面,Michel Deiman 會把整個 iOS 分成四塊,但他在課程中有到,因為課程的時間,是不可能上完所有的,甚致連上完兩塊都有問題,所以,他會把教學的時間教放在 Cocoa Touch 那一塊。

從底層到表層,分別表列如下。

Core OS: 這一部分很底層,所以並不會教。

Core Service: 這一部分也是很靠近底層,所以也不教。

Media: 大部分使用者的應用都在這,影像、照片、聲音的應用都在這一塊,但這堂課沒時間講這一層的應用。

Cocoa Touch: Multi couch, Map kit, Camera。這些應用是這一系列課程主要會說的東西。


而這堂課程會用到的

工具: Xcode8
語言: swift
framework: Foundation, UI kit
Design strategy: MVC 

而最最重要的,就是 Design strategy 一定一定要用 MVC。因為你不用 MVC 最後,只會讓你的 app mess up。



— 開始做計算機 —

每一次的第一堂課, Michel Deliman 都會快速的做出一個計算機的app給大家看。因為他製作的速度真的太快了,所以大家會看得很有意思。不過同時,他在講話的同時,手是不會慢下來的,所以建議各位有雙螢幕的話,還是另外開一個視窗,或是用另一個裝置去看影片吧。

這一點,我倒是蠻佩服現場的學生,因為當你在現場的時候,是不可能喊一聲「時間暫停」,然後老師就定格了,你的大腦、耳朵、手,都必須邊看邊學,才有可能跟上 Michel Deliman 的節奏。

Swift & Xcode 學習歷程 - Part 0 前言

Swift & Xcode 學習歷程 - Part 0

好久沒用 blog 了,接下來,會有一系列的文章,去紀錄自己學習 Swift 和Xcode 的歷程。而這一系列的文章,只是單純的紀錄自己的學習狀況,並不會有教學。如果是想切磋 Swift 的朋友,歡迎來信。

我自己使用的教材,是 Stanford 的 CS193,這一堂課的教授,使用的英文並不難,非常好理解。

而所謂的 part 並不是一天一天的紀錄,在一開始的時候,雖然想把每天學習的狀況都記下來,但後來發現,這樣的開發紀錄方式,並不適合用在「程式語言」上面。所以,我決定把學習的紀錄,用一個一個不同的階段,當我自己往前進了一些,然後完成了一個小的 project,我就會紀錄下來,自己會了什麼。

希望在半年後,或是一年後,我可以很有自信的說,我會了 Swift。

寫於 2017.04.02

Lin, Marvin