一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Swift洗牌動畫效果的實現方法

Swift洗牌動畫效果的實現方法

2020-07-19 11:49beatman_z Java教程

這篇文章主要介紹了Swift洗牌動畫效果的實現方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

目標效果: 點擊動畫按鈕之后每張牌各自旋轉 散開到屏幕上半部分的任意位置之后回到初始位置 比較像LOL男刀的技能動畫 : )

1: 創建卡牌對象

?
1
2
3
4
5
6
7
for _ in 0...49 {
        let cardSet = UIImageView(image: UIImage(named: "cardBackLandscape"))
        self.view.addSubview(cardSet)
        cardSet.frame = self.landscapeCardBack.frame
        self.cardSetList.append(cardSet)
      }
      NSNotificationCenter.defaultCenter().postNotificationName("setCreated", object: nil)

把每個卡牌作為UIImageView創建出來,為了之后對這些牌進行操作 我用數組把他們持有住 在同一位置創建好了之后 使用本地通知發送setCreated消息 告訴這個頁面的觀察者card set已經創建完畢 可以開始執行第二步動畫

2: 首先需要把開始動畫的按鈕的用戶交互關閉,如果開著的話連續點擊每次都會創建50張牌,導致程序卡頓甚至掛掉

這里的delayTime是給線程加一個延遲時間 只是為了讓動畫不很生硬

每次循環給對應下標的card對象添加旋轉動畫,并且改變它的原點,我在用UIView動畫實現這套動畫之前想過給每張牌添加貝塞爾曲線,那樣的話確實可控性更高,但是由于時間關系我還是只用了UIViewAnimation,給card添加的旋轉動畫是使用POP動畫庫實現的,這里使用的是Basic動畫.這一步結束之后會把每張牌旋轉并散開到不同的位置,在delayTime結束并觸發本地通知發送shuffleFinished的時候,這個頁面的觀察者會執行下一部動畫 也就是把每張牌還原到動畫起點

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func shuffleTheSet() {
    self.shuffleButton.userInteractionEnabled = false
    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue()) {
      NSNotificationCenter.defaultCenter().postNotificationName("shuffleFinished", object: nil)
    }
    for count in 0...49 {
      UIView.animateWithDuration(0.3, animations: {
        let cardRotateAnimation = POPBasicAnimation(propertyNamed: kPOPLayerRotation)
        cardRotateAnimation.fromValue = 0
        cardRotateAnimation.toValue = CGFloat(M_PI * 2.0)
        cardRotateAnimation.duration = 1
        //        cardRotateAnimation.duration = Double(count>5 ? count/2 : count/10)
        cardRotateAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        self.cardSetList[count].layer.pop_addAnimation(cardRotateAnimation, forKey: "cardRotation")
        self.cardSetList[count].frame.origin = CGPointMake(CGFloat(arc4random()) % (250 - 0 + 1) + 0, CGFloat(arc4random()) % (300 - 74 + 1) + 74)
        self.view.layoutIfNeeded()
        self.landscapeCardBack.removeFromSuperview()
      })
    }
  }

3: 把每張牌的還原到初始位置,并把button的title設置為切牌狀態.

?
1
2
3
4
5
6
7
8
for count in 0...49 {
      UIView.animateWithDuration(0.3, animations: {
        self.cardSetList[count].center = self.landscapeCardBack.center
      })
      self.view.layoutIfNeeded()
    }
    self.shuffleButton.userInteractionEnabled = true
    self.shuffleButton.setTitle("Cut Card", forState: .Normal)

牌洗完之后的需求是切牌,由于時間原因下周繼續更新后續動畫效果

以上所述是小編給大家介紹的Swift洗牌動畫效果的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/beatman_z/article/details/53876670

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 狠狠色综合久久久久尤物 | 憋尿调教绝望之岛 | 色帝国亚洲欧美在线蜜汁tv | 国产午夜精品久久久久 | 69pao强力打造免费高速 | 奶茶视频有容乃大 | 无码国产成人午夜在线观看不卡 | 明星ai智能人脸替换造梦在线播放 | 亚洲国产精品一区二区首页 | 亚洲第一福利视频 | 92精品国产成人观看免费 | avidolz中文版| 王晶经典三级 | 欧美三级做爰全过程 | 国产精品国产精品国产三级普 | 日本男男gayxxxxx免费 | 女人肮脏的交易中文字幕未删减版 | 男人捅女人动漫 | 短篇同学新婚h系列小说 | 红杏网 | 青青草国产精品 | 91在线老师啪国自产 | www.一级片.com | 国产区一二三四区2021 | 99久热只有精品视频免费看 | 国内精品在线播放 | 国产福利一区二区精品视频 | 国产精视频 | 国产精品aⅴ| 亚洲国产欧美在线看片 | 成人欧美一区二区三区 | 青草欧美 | 亚洲 综合 欧美在线视频 | 天天草天天 | 成年人黄视频在线观看 | 国产精品51麻豆cm传媒 | 美女扒开奶罩让男人吃奶 | 免费全看男女拍拍拍的视频 | 国产一卡二卡3卡4卡四卡在线 | 国产精品视频播放 | 欧美成人影院免费观 |