來製作專屬自己的QA問答吧!

前言

看了一下作業問答題的App幾乎都是Hard Code加上聯想到前陣子IG朋友圈經常玩的Buddymeter,決定來實作個可以自訂問題內容及答案選項的問答題App。

設計畫面

主要分四個View Controller頁面分別為:

  • 登入畫面
  • 設定頁面
  • 答題頁面
  • 結算頁面

登入畫面

登入畫面走一個簡約樸素風,再加一個?的動畫看起不死板一點。

下面是想讓?選旋轉360度且持續播放的動畫效果:

設定頁面

設定頁面運用 TableViewController 的 cell 特性,可以簡單快速的將五個問題表單呈現出來。

接下來就是 coding 實作所需功能,首先需要將設立的問題、選項內容、正確選項做資料傳值到答題頁面,題目總共有五題傳送的資料會稍多,新增了自己定義的型別來做資料傳值,並在宣告的時候表示為陣列,這樣就能清楚知道讀取的資料題號是多少,也不必宣告過多的參數。

這裡有碰到需要花時間思考的問題,IOS 似乎沒有像 Android 有 RadioButton 的元件UI,因為正確答案只有一個,所以三個 Botton 必須有所連動,去辨別其存取正確的 Botton,最後剛好在 Github 上找到有人寫好的套件,直接偷吃步引用吧。

再來就是最重要的防呆設置,必須確保每個欄位以及選項都有設置,才能導向到答題頁面,所以這裡的 Button 沒有使用 拉 segue 方式導向下一個畫面,而是改用 code 去呼叫換頁,才好方便處理 Button 觸發事件。

答題頁面

這裡其實可以無腦一點用五個 View Controller 去呈現,不過我想挑戰看看在同一個 View Controller 做頁面的更新,同時再配合 UIProgressView 做進度的查看。

在實作的時候有發現一個問題,就是 Button 觸發後隨即更新畫面,導致來不急顯示 Button 的背景顏色查看是否答對,運用下面方法讓 Button 觸發當下延遲0.5秒再執行。

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5){}

結算頁面

結算畫面用了不少 UIView.animate() 做一些特效 ,這裡有個小困擾,因為原先的UIProgressView 實在是太細太小,而且 Siwft 內建的樣式很少,只好透過下面方式把 UIProgressView 放大起來。

self.qaUIProgressView.transform = CGAffineTransform(scaleX: 1.0, y: 18.0)

Try again

測驗結束當然也要有可以再測一遍的功能,需將畫面再次導向答題頁面,這裡有碰到一個問題,因為直接導向答題頁面,畫面將會停留在最後問答結束的第五題,所以需將答題頁面的相關參數做重整。

完結

有發現問題還請多指教~

--

--