項目:看圖猜詞
項目地址: https://github.com/FFFFFFMILK/GuessPicture/tree/master
項目來源:ITcast 初級教程 UI 基礎(chǔ)
需求分析:
- UI 顯示
- 數(shù)據(jù)載入
- 猜詞邏輯
UI 顯示
- 信息顯示區(qū)域
四個按鈕:提示、大圖、幫助、下一題
三個Label:第幾題、題目描述、金幣數(shù)量
一張圖 - 答案區(qū)域
根據(jù)答案字?jǐn)?shù)顯示幾個空白 view - 選項區(qū)域
3 x 7 個選項
數(shù)據(jù)載入
從 plist 載入數(shù)據(jù)
猜詞邏輯
- 點擊選項區(qū)域:
選項區(qū)域按鈕消失
答案區(qū)域第一個為空的按鈕顯示已選答案字 - 點擊已填答案區(qū)域:
清空字
字回到選項區(qū)域 - 輸入完成,判斷正確與否:
錯誤:字變紅,可以繼續(xù)做題,減 1000 金幣
正確:禁用選項區(qū)域,1s 后切換下一題,加 100 金幣 - 提示按鈕:
點擊后,清空答案區(qū)域,現(xiàn)實答案第一個字
減 100 金幣 - 大圖按鈕:
點擊后,出現(xiàn)半透明灰色遮罩,同時放大圖片 - 下一題按鈕:
切換數(shù)據(jù)
當(dāng)沒有下一題,需要禁用按鈕
時長用時:一個頁面,有一定的邏輯判斷,4h左右
tip:
左縮進(jìn):command + [
右縮進(jìn):command + ]
代碼知識點
懶加載:存儲數(shù)據(jù)的數(shù)組,當(dāng)數(shù)據(jù)為空時,才從 plist 讀取數(shù)據(jù),否則直接返回數(shù)組
-
給 UIImageView 添加點擊事件:添加手勢消息
[_image addGestureRecognizer:[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickImg)]]; 如果禁用了父 View 的交互,子View 也無法進(jìn)行交互:userInteractionEnabled
使用 block 進(jìn)行迭代:enumerateObjectsUsingBlock
button 的當(dāng)前 title:btn.currentTitle
-
警告框:UIAlertController 的用法
UIAlertController *alertCtrl = [UIAlertController alertControllerWithTitle:@"沒錢啦" message:@"去充錢吧" preferredStyle:UIAlertControllerStyleAlert]; [alertCtrl addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]]; [alertCtrl addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:nil]]; [self presentViewController:alertCtrl animated:YES completion:nil]; -
使用 transform 進(jìn)行縮放變形動畫:
CGFloat delta = show ? 0.6 : 0; CGAffineTransform transform = show ? CGAffineTransformMakeScale(1.5, 1.5) : CGAffineTransformIdentity; [UIView animateWithDuration:0.5 animations:^{ _coverView.alpha = delta; _image.transform = transform; }]; 九宮格布局的坐標(biāo)計算:i % column 和 i / column
-
從 plist 中讀取數(shù)據(jù)
// 從 plist 文件中讀取數(shù)據(jù)
NSArray *arr = [NSArray arrayWithContentsOfFile:[NSBundle mainBundle pathForResource:@"questions.plist" ofType:nil]];// 把數(shù)組中的字典轉(zhuǎn)化為自定義的數(shù)據(jù)模型 for (NSDictionary *dic in arr) { [_dataArray addObject:[OptionModel optionModelWithDict:dic]]; } 利用 kvc 將字典賦值給自定義數(shù)據(jù)模型:setValuesForKeysWithDictionary