去年就已經上了搖骰子功能,今年把這個模組總結一下
,用到的知識點很多,但都是比較基礎的。
我先羅列一下知識點,骰子的數量可控,
根據不同的玩法返回對應的數值,要涉及到去重,搖一搖開啟動畫
1,uiimageview的動畫 --旋轉動畫
2,高階動畫--組動畫
3,玩法組合--隨機數產生,骰子數值**
4,加入系統搖一搖功能
5,閉包**,列舉型別運用
這裡只列出了部分**,完整**,請移步github
檢視原始碼:github:ddgdiceanimation
//也可用晃動動畫,這裡採用了動畫
uiimageview 自己封裝好動畫,需要傳入陣列
//轉動骰子的載入
let myimages:[uiimage] = [uiimage(named:"7.png")!,uiimage(named:"8.png")!,uiimage(named:"9.png")!]
//骰子1的轉動切換
let imagedong11 = uiimageview(frame: cgrect(x: 85.0, y: 115.0, width: 90.0,height: 90.0))
//設定動畫切換時間
imagedong11.animationduration = 0.1
//設定動畫資源
imagedong11.animationimages = myimages
//開啟動畫
imagedong11.startanimating()
//設定動畫
let spin = cabasicanimation(keypath: "transform.rotation")
spin.duration = animations
spin.tovalue = double.pi * 16.0
//******************位置變化***************
//設定骰子1的位置變化
//注意不要染骰子運動到螢幕之外
let dice1point = self.getrandomnumbers(8, lenth: uint32(screenwidth))
//用關鍵幀動畫 ,設定四個點,按照這四個點移動
let p1 = cgpoint(x: cgfloat(dice1point[0]), y: cgfloat(dice1point[1]))
let p2 = cgpoint(x: cgfloat(dice1point[2]), y: cgfloat(dice1point[3]))
let p3 = cgpoint(x: cgfloat(dice1point[4]), y: cgfloat(dice1point[5]))
let p4 = cgpoint(x: cgfloat(dice1point[6]), y: cgfloat(dice1point[7]))
//把點轉換成nsvalue陣列下一步要用
let keypoint = [nsvalue(cgpoint: p1),nsvalue(cgpoint: p2),nsvalue(cgpoint: p3),nsvalue(cgpoint: p4)]
//初始化動畫的屬性是位置動畫
let animation1 = cakeyframeanimation(keypath: "position")
animation1.values = keypoint
animation1.duration = animations
imagedong11.layer.position = cgpoint(x: screenwidth / 2 - 60, y: screenheight / 2.0 - 50)
//骰子1的動畫組合
let animgroup1 = caanimationgroup()
animgroup1.animations = [animation1]
animgroup1.duration = animations
//動畫結束時會呼叫**方法,將計算好的骰子動畫傳給控制器
animgroup1.delegate = self
imagedong11.layer.add(animgroup1, forkey: "position")
//隨機產生不同的號碼
func getrandomnumbers(_ count:int,lenth:uint32) -> [int]
}return randomnumbers
}
加入系統的搖一搖動畫(晃動手機就呼叫)
這個比較簡單
//匯入系統庫
import audiotoolbox
//呼叫並重寫系統方法
override func motionbegan(_ motion: uieventsubtype, with event: uievent?)
}}//模擬器呼叫方法
點選模擬器
simulator -> hardware -> shake gestrue
func animationdidstop(_ anim: caanimation, finished flag: bool)
}
func animationdidstop(_ anim: caanimation, finished flag: bool)
} else if diff3arr0 == 2
} else if diff3arr0 == 3
} else
//色子1
imagedong1.image = uiimage(named: "\(diff3arr0).png")
//色2
imagedong2.image = uiimage(named: "\(diff3arr1 ).png")
//色3
imagedong3.image = uiimage(named: "\(diff3arr2 ).png")
self.animationstop(true, dicearr:[diff3arr0 ,diff3arr1 ,diff3arr2 ])
case .same2type:
let same2arr = self.getrandomnumbers(2,lenth: 6)
//色1
imagedong1.image = uiimage(named: "\(same2arr[0]).png")
//色2
imagedong2.image = uiimage(named: "\(same2arr[0]).png")
//色3
imagedong3.image = uiimage(named: "\(same2arr[1]).png")
self.animationstop(true, dicearr: [same2arr[0],same2arr[0],same2arr[1]])
case .same3type:
let same3arr = self.getrandomnumbers(1,lenth: 6)
//色1
imagedong1.image = uiimage(named: "\(same3arr[0]).png")
//色2
imagedong2.image = uiimage(named: "\(same3arr[0]).png")
//色3
imagedong3.image = uiimage(named: "\(same3arr[0]).png")
self.animationstop(true, dicearr: [same3arr[0],same3arr[0],same3arr[0]])}}
檔案快取oc版:
檔案快取swift版:
截圖庫:
一步步手把手教你寫seo文章
1 文章標題 a 文章標題用h1 b 標題的撰寫不要太學術,詞語應通俗易懂,要符合搜尋習慣,我們的文章不是給醫學院的學生看的。e.g.愛滋病的學名是後天免疫力缺乏症,你就不要用 後天免疫力缺乏症 來組織標題,相信絕大部分使用者看不懂。c 標題的字數不要太多 你把標題寫30個字自己看著都會很彆扭 網民...
一步一步教你配置vnc
配置 vnc遠端桌面連線 1.在命令列輸入 init 3 進入純字元介面 2.kill 掉所有與 x有關的程序 用命令ps aux grep x 然後kill 程序號1 程序號2 只要找到的程序都 kill 掉 如果不會使用 kill 命令,直接重啟電腦 3.首先檢查 vncserver 是否安裝使...
教你 新手 一步一步開始SEO
如果你從事seo工作已經有段時間了,你可能對如何來優化乙個網頁有種直覺。你可能是同時來做好幾件事,而不是執行一步一步的過程。但是如果你是正在學習seo,或者是試圖去理解seo們是怎麼來做你的網頁的,那就顯得有些難度了,尤其當你第一次接觸這個的時候。這篇文章旨在幫助seo初學者們更多的了解seo的過程...