5/17/2018

IOS App 2018/6/17


IOS App – Enjoy In Life

啟發:
        平常想知道附近有什麼餐廳或者商店都會使用Google Map,但是地圖上的點散散的,讓我覺得不是很容易找同一類型的店,而且若想知道這家店有沒有開也需要點進去看,讓我覺得有點麻煩。
    因此想為自己開發一個可蒐集附近店家並統整類型,且可快速知道是否有營業的App

原始製作想法:
    透過一些方法去取得Google MapApple Map的地圖資訊,並利用抓取回來的資料類型將資料分群,每筆資料用顏色區分是否營業,點擊後可觀看資料的詳細內容,如:位置、電話、營業時間或評論等,並且提供導航功能。

預期功能:
1.     抓取附近地圖資訊
2.     顯示是否營業
3.     顯示每個資訊的詳細資料,如:位置、營業時間或評論等
4.     透過目前位置與選擇的店家位置啟動導航功能

實際製作結果:
    透過一些方法去取得Google MapApple Map的地圖資料,並利用抓取回來的資料類型將資料分群,每筆資料用顏色區分是否營業,點擊後可觀看資料的詳細內容,但詳細內容中營業時間雖有取得但是七天的營業時間,如:星期一16:00~18:00,因為還要判斷當天是星期幾所以不顯示正確時間,只已開始抓取位置後的時間判斷該店是否有營業;而評論部分由於Google Map每人每天最多要5個評論,資料量太少也就省略。
        導航部分原本是想做成一般導航的樣子,但由於不知如何透過程式啟用就改成用地圖顯示當地位置與目的地位置,且繪製一條路線在地圖中。

目前功能:
1.     抓取附近地圖資訊
2.     顯示是否營業
3.     顯示每個資訊的詳細資料,如:位置、電話、website、評價等
4.     透過目前位置與選擇的店家位置繪製路線於地圖中

尚未完成:
1.     一些bug導致閃退
2.     導航功能

App操作展示:
 
App的過場頁面

上圖過後接著會顯示所有附近店家的店名
淡黃色代表該店正在營業中

點擊店名的cell會進入對應的頁面
頁面中呈現的是該店的詳細資料
如:地址、電話、官網、評價、價格等

點擊前一張圖的一鍵導航後會進入此頁面
圖中標記為目前所在位置與你選選取店家的位置
並提供一條路線讓你可以通往該店

右上方可切換不同交通工具所走的路線
只有走路與開車兩種路線可選擇


結論:
    雖然整體做起來不算太困難,但是動態抓取資料並顯示其實不好弄,而且有些想法因找不到可參考的方法而不知如何使用;製作過程中使用很多框架(framework),每個框架有各自的用法,要一個一個的研究,花費我許多時間,幸好有學長強力支援,才能讓我實現許多心中所想的功能。

遇到的挫折總整理:
    由於在實作上碰到各式各樣的問題,有些問題很詭異也有些值得讓學弟妹知道,因此在這裡整理我所碰到的問題及解決方法當學弟妹碰上同樣問題時可以參考,記得若碰上問題最優先需知道哪裡錯誤以及為何錯誤,可以的話把訊息印出來,讓Google幫忙。

Q1:
    使用cocopods創建了workspaces檔,開啟後直接執行發生連結錯誤?
A1:
    遇到這個問題是很詭異的,試試重開專案有沒有辦法解決,若無法只好重建
Q2:
    為何使用Google Map而不使用Apple Map,明明Apple已經有內建Mapkit可以使用了?
A2:
    一開始我也是執行嘗試Apple Map,但是Apple Map必須要自己設定naturalLanguageQuery,簡單來講就是搜索類型,例如今天要搜尋這個區域的所有咖啡店,就要設定naturalLanguageQuery=”coffee”,這跟我原本的想法相違背,又找不到能解決的方法因此不使用Apple Map實作。
    而使用Google Place API後它會依照目前位置自動抓取附近位置的資料,雖然我也不確定抓取範圍多廣,這點跟我的想法比較相近,所以就採用這個方法了。
    想知道如何使用可參考此網址:https://developers.google.com/places/ios-api/start?hl=zh-tw
Q3:
    按照官方流程使用Google Place API後還是抓不到資料?
A3:
    這有幾種可能,官方的流程中沒特別明講CLLocationManager,這個是CoreLocation框架中的一個方法,它的目的是跟使用者要使用地圖的權限以及當收到地圖資訊時把操作資料的權限交給對應的class,若沒有使用此方法是無法拿到資料的。
    也有另一種可能是你使用虛擬機打開後,虛擬機本身沒有地圖資訊,因此你必須要啟動後回到Xcode自行設定假地圖位置才能夠得到目前所在的附近資訊。
Q3:
    使用Google Place API後營業時間都一樣感覺不大對?
A3:
    那是Google Place API自己的問題,當初我也很困惑,後來是透過http的方式用每個店特有的place IDGoogle Map Server要才拿到正確資料,雖然繞了很大一圈但畢竟這是我的功能中重要一環,也只好做了,想知道如何使用可參考網址: https://developers.google.com/places/web-service/details#PlaceDetailsResults
Q4:
    拿到資料後要如何將資料顯示?
A4:
    大部分動態資料的顯示都是自行改寫tableView,這部分可動態生成tableView或者先拉好tableView後將tableViewdelegate設為class自己,然後自行改寫tableView的函式已達到動態效果,詳細用法可參考網址: https://itisjoe.gitbooks.io/swiftgo/content/uikit/uitableview.html
Q5:
    要如何繪製路線?
A5:
    繪製路線的方式我是直接參考網路上的資料,網址為: https://swift.gg/2017/05/02/draw-route-mapkit-tutorial/
Q6:
    想顯示不同路線卻不知如何消去已繪製的路線?
A6:
    我一開始的想法是用白色的線將原本的路線塗掉再用別的顏色畫想要的路線,但是多按幾次路線切換後會發生重疊問題,一直都修不好,後來學長教我在繪製新路線時先使用mapView.removeOverlays(MapView.overlays)將原本路線消除即可,若還是不清楚可以問學長。
Q7:
    在使用tableView顯示資料時如果內容超過cell的長度後面會變成,是否有辦法全部顯示出來?
A7:
    這是因為cell中儲存資料的label預設寬度為無限大,這表示你不管多長的內容皆會被擠在同一列中,而內容超過cell的大小則會顯示成,這並不是cell不支援自動調整高度的問題。若要顯示所有內容,只要在你創造cell時把cell.textLabel.numberOfLines設為0,那麼當內容超過cell大小時label會自動換行,而tableView又提供根據內容高度自動調整,此時你的cell會變高,內容也會全部顯示出來。
Q8:
    若想要在不同View中傳資料或想切換頁面該怎麼做?
A8:
    這方法有很多種,而我是採用設定ViewstoryboardID,預設是沒有的,可以點選View在右邊的Identity inspector中設定,並把Use StoryboardID勾起來,在程式中撰寫以下程式碼:
1.     let vc = storyboard?.instantiateViewController(withIdentifier: ”StoryboardID”) as! 要轉移的頁面所對應的class名稱
2.     在要接收資料的class中設定一個變數,然後直接在要送資料的class中撰寫vc.變數名稱,即可把要傳送的資料存到該變數中
3.     使用present(vc, animated:true, completion:nil)進行頁面切換
4.     若要返回上個頁面則使用dismiss(animated:true, completion:nil)即可
Q9:
    要怎麼使用陣列或字典?
A9:
    在處理動態資料時總是需要陣列或字典來幫忙預存資料,而swift又是新語法,很多初學者常常面對明明很簡單卻不知怎寫的問題
陣列: var array:[型態] = []
字典:var dic:Dictionary<型態,型態> = [:]
    上面的[][:]只是代表空陣列與空字典,並不是初始化,swift若不預設為空會產生很多error,要特別注意。
Q10:
    在處理某些資料時它回傳的型態為NSString,導致顯示時會變成optionals(“…”),但我只想要字串的值該怎麼辦?
A10:
    我曾經被這點搞得很難過,swiftNSStringString幾乎可以互轉,但怎麼轉顯示出來都怪怪的,我也曾經異想天開用迴圈跳過optionals直接吃成另一個字串,但碰到各種問題,因為NSString不允許取得字串的某個字元,而且強制轉型後String也不能跟char互接,最後發現根本不需要這麼麻煩,你直接在NSString的變數後面加!就可以幫你處理掉討厭的optionals了,不要再去走一次我走過的路了
Q11:
    使用CLLocationManagerstartUpdatingLocation()每隔一小段時間就會在抓取一次資料,若不想一直抓取該怎麼辦?
A11:
    當初被這個問題搞到,害我不斷顯示重複的資料,我的方法是執行完一次startUpdatingLocation()後就直接執行stopUpdatingLocation(),這樣一來它就只會抓取一次資料,而若還需要重抓資料則建一個button讓使用者自行刷新即可。
Q12:
    當動態產生某個物件時希望它大小是全螢幕該怎麼辦?
A12:
    Swift有方法可以抓取手機螢幕大小,範例如下:
var fullScreenSize = UIScreen.main.bounds.size
全螢幕的寬度 : fullScreenSize.width
全螢幕的長度 : fullScreenSize.height
Q13:
    想要依照某些條件把特定幾個cell的背景顏色換掉,卻發生不符合條件的cell顏色也改了,該怎麼辦?
A13:
    這是因為你使用了tableView.dequeueReusableCell,它是tableView的一個函式,是當tableView中有空閒的cell(猜測是沒有被顯示在螢幕上但已被產生),它會拿空閒的cell來用,若沒有則產生新的cell,這方式能提高效能,但對於要改特定cell的工作來會有點麻煩,因此不能只判斷符合條件後更改背景顏色,還要另外多判斷若沒有符合條件要改成原本的顏色才可以正確執行出你想要的結果。
Q14:
    在滾動tableView發現有殘影的現象該怎麼辦?
A14:
    這部份在我試著要改tableViewbackgroundColor時有發生過,主要原因就是因為我是動態產生tableView,而我產生tableView的函式是當我每次抓取地圖資料時就會執行,而抓取地圖資料部份又因為CLLocationManager會一小段時間就執行一次,而以上這些巧合導致了我動態產生好幾個tableView,原本看不出來是因為預設tableView的背景顏色是不透明的,因此會把後面的tableView擋住讓你看不到,但是實際上已經產生了好幾個重複的tableView,現在你嘗試更改背景顏色並為了好看而調整透明度,導致原本被擋住的tableView中的內容顯示出來,造成了殘影現象。
    瞭解事情的原委後試著測試看看你是否真的動態產生多個tableView,若真如此應該改成只產生一次tableView,而以後想依照更新後的資料更改其內容應使用tableView.reloadData()
Q15:
    要怎麼用程式碼更改textLabel的字體大小?
A15:
    其中一個方法:textLabel.font = UIFont.systemFont(ofSize: 20)
Q16:
    要怎麼用程式碼更改tableViewsection的背景顏色?
A16:
    這個有一點麻煩,我使用的方法如下:
1.     let header = view as! UITableViewHeaderFooterView
2.     header.contentView.backgroundColor = UIColor(red: 237/255, green: 177/255, blue: 124/255, alpha: 0.8)
記得在使用UIColor的顏色,原本RGB的值都要除255alpha是控制顏色的不透明度,1代表完全不透明,0代表完全透明。
Q17:
    若想改變App在手機上顯示的小圖示怎辦?
A17:
    我的方法是利用以下網站轉出所有icon,再將對應的圖片放入AssetsApp icon




    以上是我在製作此App時所碰到的各種問題,在這裡留下經驗讓以後學弟妹們有個參考方向。

期末心得:
    雖說會有人覺得用我的App不如直接用Google Map好,反正也有提供類似的功能,而且介面更好更棒,但這是我想要的App,我製作時樂在其中,不僅稍微學會swift語法,更學會framework的使用方法,也知道cocoapods如何使用,這對我自己來說已經足夠了,我很感謝老師給我機會讓我做自己想做的東西,我只有一句話:這個App我不後悔。

參考網址如下:
6.     陳奕穎學長的facebook

電量提醒

專案動機
    在之前使用sony手機的時候,過充導致電池膨脹,因此我養成了只將電池充到一定程度的習慣,另外iphone內建的電量過低提醒並不會發出持續的音效,不容易被人注意到,所以我決定做出會發出持續音效的電量提醒app。

專案功能
    主要功能分爲電量上限提醒,與電量門檻提醒,電量上限提醒即在手機電量超過使用者設定的電量時,會發出本地通知,此通知會附帶持續一段時間的音效,電量上限提醒的主要功能為避免過充,的確iphone在電量充滿時會斷電並放電來避免過充,但是在電量足夠時拔掉插頭這個動作,必然在對過充的防範上比一直插著插頭更為有效,電量門檻則是在電量低於使用者設定電量時,會發出本地通知與音效。

demo
初始狀態 label會標示為stop

利用pickerview挑選完電量之後,按下battery upper limit按鈕觸發計時器
當手機電量>設定電量,程式將發出本地通知


按下battery lower limit按鈕
當手機電量<設定電量,將發出一本地通知






專案實作
    在使用者使用Pickerview選擇好電量並按下電量提醒按鈕之後,程式會啟動計時器(Timer),計時器每分鐘會判斷一次手機電量(在電量40到80之間iphone充電大約每分鐘增加1%)是否高於或低於 使用者設定電量,若條件達成,計時器會發送一帶有音效的本地通知。
    iphone對後台程式時間限制是十分鐘,若要讓程式固定在後台執行,需要讓程式在背景播放音樂,因此為了讓程式在後台正常執行,該程式在開始運行時,會在背景播放無聲音樂。

專案特色
    1.較為有效的提醒
        apple內建的電量提醒只有一聲簡單音效,若在非使用手機的情況下,或是吵雜環境,像         是手機放在桌邊撰寫報告時、手機放在口袋周圍路人很多時,透過播放持續一段時間的           提醒  音樂,與時間間隔為一分鐘的本地通知,電量提醒更加容易讓人注意到。
    2.可選擇的電量門檻
        對於一些在意電池健康的使用者,可選擇的電量門檻能幫助這些使用者有效控管電量,
        有數據統計手機鋰電池將電量維持到40%到80%電池耗損比電池充滿的耗損還要低,                 iphone對電池充電的設計也是在40%到80%之間大約為1分鐘1%,若電量小於40%或大於           80%充電速度則會降低。
 

期末程式大綱

由於想不到期末專題要做些什麼,想了很久之後決定做一個調色盤。
去查了一下 Play 商店(沒有蘋果手機)後,發現貌似沒有很多人在做調色盤,而唯一一個高分的調色盤也沒有我想像中的效果,因此決定做一個調色盤出來。

我理想中的調色盤應有兩顏色對比,以及多顏色對比,在 Play 商店中的App只有兩顏色對比,以及色弱測驗(說實在我覺得很沒必要)。

我理想中的多顏色對比,大約16個方格,每個方格可以點進去調RGB色彩,並且在畫面上顯示顏色,至於兩色對比,則是一個頁面上有兩個大的畫布,而下面可以調RGB色彩。

垃圾車來了

本文章同步刊登於我的部落格,並且會不定期更新資訊。

前言:
這是一個自己想題目、自己練習實作的簡易App。
這學期由於修了資工系的iOS程式設計課程,老師要大家期末想一個專題並發表。
之前其實摸了Xcode一段時間,偶而看一看網路上的教學,並且跟著實作,做出來就覺得酷斃了!
不過隨著App建構的複雜性越來越高,遇到的問題就排山倒海的壓在我身上。
一個很有感的例子是ViewController與ViewController之間的傳值動作,以前都是在一個ViewController上弄簡單的功能,這幾個月開始照著參考書上的教學(iOS 10 App程式設計實力超進化實戰攻略那本,買很久了  前陣子終於全部看完了),讓我開始注意到這個功能的運作。其實說實在好像也不難,但沒做習慣好像隔一陣子要再做同樣的東西又會忘記(是我老了嗎??
現在則是要從頭刻一個App,希望接下來到期末之前能如期完成。

概念與構想:
原本是想說做一個仿Instagram的App,但是做了一半感覺好像也沒什麼特別的地方。
後來又想到做一個點餐App(類似海底撈那種),可是前幾天畫了原型圖,搞了很久,覺得對使用者介面的排列好像不符合邏輯,所以又放棄,可能以後有時間再做。
今天終於是讓我想到了一個比點餐系統簡單一點、又可以學到新的API,那就是倒垃圾App。
說白了就是看看現在垃圾車到哪裡了,藉以告知使用者大概要下樓倒垃圾了。
(你問我  阿不就聽垃圾車的聲音就好,做這個App幹嘛?   阿我就單純做一個技術試驗嘛...,現在做的功能可能比較陽春,但之後加上比較完整的功能,實用性也許會更高一點,不要這麼快就打擊我......



進度:
    0516 - 
  1. 專案初始化,並配置基礎介面,包含Auto Layout的設定。
  2. 主頁側邊欄佈局設定。

    0517 - 
  1. 完成主頁及詳細頁面的TableView實作和遞值。
  2. 專案依循MVC重整。
  3. MapKit實作(用於詳細頁面)。

    0527 - 
  1. 依據手機GPS及fetch的資料,計算使用者與垃圾車的距離,顯示於UITableViewCell上。
  2. bug修復:主頁面cell選取後不會一直呈現反灰的狀態、地址能完整呈現給使用者。

    0528 - 
  1. 將所有的ViewController側邊欄正確繫結並可以生成ViewController實例。

    0531 - 
  1. 用Static TableViewController完成設定介面排版。
  2. 配置設定介面聯繫項目的三個按鈕選項。
  3. 在三個ViewController(主頁面、政府公告、設定)加入dim效果,使使用者專注於側邊欄

    0606 -
  1. 按照使用者與垃圾車距離做近到遠的排序,並顯示在主頁面TableView。
  2. 政府公告資訊頁嵌入UIWebView,用於顯示政府公告。
  3. bug fixes (UIWebView階層排列於dimView下)

    0607 -
  1. bug fixes.
  2. 設定頁面的欄位高度調整至50pt(更高)。
  3. 主頁面新增重新整理按鈕。
  4. 配置背景圖片的ViewController。

    0610 -
  1. remove redundant codes.
  2. 新增更多背景圖片至BackgroundImageViewController
  3. 主頁面大標題會根據現在時間更改向使用者的招呼內容

    0614 -
  1. 新增通知中心提醒給使用者(為Demo方便,僅使用手動觸發方式)
  2. 新增Animation Chaining
    0619 -
  1. model結構修改。
  2. 完成UITableViewCell按距離遠近呈現資料。

原型設計:
對於原型設計有許多工具可以幫助建立UI、連結關係,但我自己還是比較習慣以紙本手繪的方式描繪出心裡想要的結果,後續修改只要用橡皮擦塗塗改改就好,就不用一定要坐在電腦桌前開軟體來改東西,方便也節省時間。
這裡展示一下原型的樣子:


主頁面與公告頁面手稿

設定頁面手稿

程式運作流程:
基於政府近幾年有在推動開放資料平台,這次實作嘗試使用政府提供的Open Data做介接。原理如下表:
簡單來說,就是在程式啟動後先去網路上把資料抓下來,並進行解碼。最後透過所取得的使用者位置資料,來計算所有的垃圾車與使用者的相對距離,並呈現在UITableViewCell中。

預期成效:
    已完成:
        1.Open Data資料串接
        2.在地圖呈現垃圾車位置
        3.遵守MVC架構
        4.計算使用者與垃圾車距離
        5.整合政府公告資訊
        6.通知中心配置
        7.根據使用者距離遠近排序
    未完成:
        1.資料接收頻率
        2.中/英文化
        3.客製化背景圖片設定

Demo:


參考資料:
1.垃圾車資料來源:http://data.ntpc.gov.tw/od/detail?oid=28AB4122-60E1-4065-98E5-ABCCB69AACA6#closeDataInfo
2.json解析(Swift 4新增的類別):https://codeburst.io/easy-json-with-swift-4-1-419323ca7638
3.位置距離換算:https://stackoverflow.com/questions/45627533/tableview-sort-by-distance-from-current-location-parsing-locations-from-json
4.Swift MultiThread :https://cdfq152313.github.io/post/2016-10-14/
5.json物件解析(JSONDecoder):Apple官方文件

即時日幣換算

由於個人時常注意日本匯率與有時會購買用日幣為單位的東西,所以想要製作一個即時匯率轉換的小小ios app,介面上主要以日幣即時匯率顯示為主,打算抓台灣銀行的即時資料。並且有可以輸入日幣商品價格和匯率即時顯示台幣價格。如果未來有時間會加入其他幣別。
進入主畫面前的讀取畫面


含稅換算
主畫面開啟狀態
不含稅換算
APP ICON

左方圖片為進入程式後初始畫面,上方會顯示即時台灣銀行買入賣出匯率,下方會顯示匯率抓取的時間,在每次開啟程式時都會抓取一次資料.而換算部分可以做到即時換算,換算適用當時台銀現金賣出匯率*日幣價錢算出來(如中間圖片).而在中間做了一個稅率switch
,如果switch為開就會再換算時在換算後的台幣再加上8%的消費稅的金額(如右方圖片)
實際成品就如上圖所示.
參考資料: https://medium.com/@kuanhuachen/用-swift-取得網頁資料-c022335e4b05

翻牌遊戲

我想要製作一個翻牌遊戲,翻到兩個一樣的圖案就消掉,然後有計算分數的功能,可以的話希望可以加入背景圖以及背景音樂。

APP原型:

根據教學先做出翻牌&加牌,在自己加入隨機洗牌以及Replay按鈕以及背景圖&音樂。按下左圖的Play按鈕之後,可以進到右圖的遊戲畫面。下面的Flips代表你現在總共翻了多少次牌,當你翻到兩個一樣的牌時,這兩張牌就會消失。當全部的牌都完成配對後,右下角會出現Replay的字樣,按下去後會回到左圖,即可開始新的遊戲。

APP成品:

遊戲的初始介面,按下Play即可開始遊玩


遊玩畫面,Flips代表所翻牌的次數,翻到一樣的圖案會消除(有背景音樂)


成功破關,出現Replay字樣,按下回到遊戲初始介面

程式介紹:首先我會從字串陣列random選出一個表情符號重複塞進button陣列2次,接著把這個表情符號從字串陣列中移除(避免重複選取),重複執行此動作直到button陣列被塞滿表情符號。接著把牌堆洗牌,然後當我按下某張牌時,變數flipsCount+=1,並且執行檢查的副程式,如果在這牌堆中的isFaceUp都是false而且不計算isMatch = true,把這張牌的isFaceUp變成ture。接著我按了第二張牌,又執行了一次副程式,這時會發現牌堆中有一張牌isFaceUp == true,就會把現在這張卡和那張卡做比較,如果兩張牌圖案一樣,isMatch設定為true並且把按鈕設定成透明顏色並鎖定;如果不同,兩張卡的isFaceUp = false並把卡蓋回去。最後當isMatch == 16時,把原本設定成透明的replay按鈕顯示出來。


未來展望:連線模式、隨機可愛背景、隨機表情符號、自訂大小、歌單、翻到兩張一樣牌的時候自動消除,不會等到下一動才消除...等等

參考資料:https://www.youtube.com/watch?v=71pyOB4TPRE&list=PLPA-ayBrweUzGFmkT_W65z64MoGnKRZMq


6/17/2017

紀錄喜愛的地點

紀錄喜愛的地點

APP原型:




功能介紹:


  1. 初始頁面:這裡負責顯示儲存的地點,也是APP一開始開啟後第一個顯示的畫面。
  2. 新增地點頁面:在這個畫面你可以做新增地點的動作,輸入這個地點的相關訊息和新增一張照片,完成後按下Save就會回到初始頁面,地圖上就會顯示剛剛新增的地點;如果突然不想新增也可以按下左上角的按鈕("<")回到初始頁面。
  3. 編輯頁面(1):這裡會顯示所有之前儲存過的地點,在這裡每一列左滑後會出現刪除、編輯的動作。按下刪除後,這列就會消失,初始畫面上這個地點也會不見;按下編輯會跳到編輯頁面(2)的畫面。
  4. 編輯頁面(2):在這個畫面可以更改這個地點的相關訊息,更改完畢後,按下左上角的完成就可以完成更改。



完成進度:


  1. (O)顯示地圖及自己得位置
  2. (O)新增地點
  3. (O)喜愛地點的刪除及編輯
  4. (X)Core Data
  5. (X)自訂圖標的樣式



未來展望:


  1. 新增的地點並不是使用資料庫儲存,而是要存在手機裡面,希望之後能把Core Data的部分增加進去,讓手機可以儲存這些資料
  2. 圖標點擊後顯示的資訊框,能自訂要顯示的內容,而不是只有標題跟描述(Ex.跳出一個小視窗,上面除了顯示標題跟描述外,還能顯示相片)
  3. 每一個地點,都能存多張相片,並且顯示在點擊圖標後顯示的資訊框裡面。
    相片分為:
    (1)主要的:圖標顯示的樣子。
    (2)次要的:圖標點擊後,顯示的資訊框裡的內容。




參考資料:


  1. Google Maps SDK for iOS:
    https://developers.google.com/maps/documentation/ios-sdk/start?hl=zh-tw
  2. Core Data:
    https://itisjoe.gitbooks.io/swiftgo/content/database/coredata.html
  3. Segue:
    (1)https://developer.apple.com/documentation/uikit/uiviewcontroller/1621490-prepareforsegue?language=objc
    (2)https://developer.apple.com/documentation/uikit/uiviewcontroller/1621413-performseguewithidentifier?language=objc

6/16/2017

MCU效率(MCU•EFF)

MCU效率(EFFMCU

靈感:
我生活上遇到兩個點,我學習時容易分心,為了避免分心提升工作效率,我學習使用番茄工作法。
我不喜歡坐137,因為137要等好久,車程也很久,車況也很不怎麼樣。
希望通過這個app,提升我們的效率,例如提升學習專注度,減少繁瑣的查公車班次的動作。

為廣大銘傳學子做點實用的app


功能一
實現番茄工作法

功能二
銘傳到桃火的學生專車班次顯示


原型設計
https://marvelapp.com/1hc7hi2/screen/27601075


番茄工作法


番茄工作法


銘傳學生專車車次顯示


設定及關於我們



實際成品

核心功能番茄工作法和專車時刻表  全部實現





     附:番茄工作法有五個基本步驟:
1.  決定待完成的任務
2.  設定番茄工作法定時器至 n 分鐘(通常為25分鐘)。
3.  持續工作直至定時器提示,記下一個x
4.  短暫休息3-5分鐘。
5.  每四個x,休息15-30分鐘。




未來展望
1.豐富番茄工作法,開始計時後手機自動靜音,結束後自動恢復
2.更多專車路線
3.車次列表能更新或自行修改


參考資料

tab bar controller
https://www.tibame.com/courseplayer/9/190
番茄工作法
https://zh.wikipedia.org/wiki/%E7%95%AA%E8%8C%84%E5%B7%A5%E4%BD%9C%E6%B3%95
銘傳學生專車時刻表
http://www1.mcu.edu.tw/Apps/SB/data/164/NEWS2017/SR240997.pdf

背單字

背單字的App,設定每個單字固定間隔數天後會提醒使用者複習它
Ex:新增Apple -> 使用者確認Apple已記住 -> 分別在2天,2星期和2個月後顯示Apple幫助使用者複習熟記

若在3次中任何一次未記住單字,單字會一直重複那次的間隔時間出現
Ex:第2次時忘記Apple -> 2星期後又會出現Apple -> 又忘記 -> 2星期後又出現Apple, 直到使用者熟記,Apple才會進入第3次的時間間隔


功能說明:
  • Today
  1. 顯示出資料庫中的單字,詞性和解釋
  2. 將已記憶的單字打勾,日後打勾的單字會出現在Review複習
  3. 新增單字到資料庫
  • Search
       查詢資料庫內的單字(資料庫內的單字皆為使用者輸入過的單字)
  • Review
  1. 將Today出現過的單字 ,每隔數天列出
  2. 單字只出現單字和詞性
  3. 點進單字確認單字的解釋是否和自己記憶中的一樣


我實際做的:

Today從資料庫列出單字,右上角 "+" 為新增按鈕
  

新增頁面,按左邊可返回Today,填完單字後按 "Save" 把資料存到資料庫(Firebase)

點選任一單字列確認是否記住單字

勾銷


往左滑動,可將單字刪除


Search,僅拉好介面

Review,僅拉好介面




改進:

  1. Search的搜尋功能
  2. 資料庫內的單字若新增重複,App能夠給予提醒
  3. Review的複習改為答題方式,更能測試出使用者的記憶狀況
  4. Review的功能改為推播通知,主動通知使用者複習,而不是被動地等使用者點入App才複習



6/02/2017

猜猜我是誰?

      以前小時候在看神奇寶貝的時候,總會有我是誰這個單元,讓你猜這個影子是哪隻神奇寶貝,動畫裡也有一集是拿猜影子來當做考試題目 ,所以我就想到可以做這樣一個小遊戲來回憶童年的時光,當然也會有小小的惡趣味在裡面,近請期待。

原型設計:
   
首頁可以選擇難度
簡單:可以看到整個影子且可以旋轉
普通:可以看到整個影子但不能旋轉
困難:可以看到影子的下半身但不能旋轉



遊戲畫面:
給你十秒看影子
然後輸入這隻寶可夢的英文名



功能:

1. 可以從首頁傳難度給遊戲畫面
2. 可以顯示3D模型
3. 可以控制場景內相機位置
4. 可以倒數計時

遇到的問題:

1. 每個模型的大小不一,在控制相機位置時很困難,容易破圖
2. 模型在場景的位置不一定是在 ( 0 , 0 , 0 )的位置

解決辦法:
    
    選擇位置在 ( 0 , 0 , 0 )且大小差不多的模型  (挑超久的)

參考資料:

IOS 10 App程式數字實力超進化實戰攻略

Apple Developer

Facebook for Developer