iOS 手把手教你一步一步完成搖骰子動畫

2022-07-26 22:24:17 字數 3983 閱讀 9894

去年就已經上了搖骰子功能,今年把這個模組總結一下

,用到的知識點很多,但都是比較基礎的。

我先羅列一下知識點,骰子的數量可控,

根據不同的玩法返回對應的數值,要涉及到去重,搖一搖開啟動畫

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的過程...