Swift版本之大雪紛飛

今天真是閒來無事,隨便看了一下蘋果官方的Swift教程。其實也僅僅是看了第一章內容,記住了一點幾本的語法。
然後想起昨天自己沒事寫的大雪紛飛的動畫,自己就拿起來練一下手。
這裏寫圖片描述
說真的做Demo的時候還真遇到幾個比較棘手的問題。

  1. Swift是強類型語言,對沒有隱式的數據類型的轉換,也就是說,即使是 Float/Int這種運算都會報錯,需要你自己轉換成相同的數據類型。
  2. Swift中沒有block的概念,不過Swift語言中的函數功能及其強大,可以當參數,可以當做返回值。也就是說可以用函數完全取代block。
  3. 要習慣點語法,Swift訪問成員變量和方法都用點語法。初始化的時候使用構造函數。

不過有google無難題,下面就不說廢話了。
具體思路可以看OC實現的版本,
http://blog.csdn.net/supersonico/article/details/47061771
下面直接上Swift的源代碼:

import UIKit

class ViewController: UIViewController {

    //定義常量
    let screenHeight = UIScreen.mainScreen().bounds.size.height
    let screenWidth  = UIScreen.mainScreen().bounds.size.width

    let plus_height  = UIScreen.mainScreen().bounds.size.height/CGFloat(25)

    //定義變量
    var imageArray = [UIImageView]()
    //重載方法
    override func loadView() {
        var imageView = UIImageView(image: UIImage(named: "backgound.jpg"))
        imageView.contentMode = UIViewContentMode.ScaleAspectFill
        self.view = imageView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        for var i = 0; i < 1000; ++i {
            var imageView = UIImageView(image: UIImage(named: "snow"))

            var x = (arc4random()%20 + 10)

            imageView.frame = CGRectMake(CGFloat(arc4random()%UInt32(UIScreen.mainScreen().bounds.size.width)),CGFloat(-30), CGFloat(x), CGFloat(x))
            imageView.alpha = CGFloat(arc4random_uniform(9))/10.0

            self.view.addSubview(imageView)

            self.imageArray.append(imageView)
        }

        //創建時鐘,並且添加到主循環中
        var link = CADisplayLink(target: self, selector: Selector("makeSnow"))

        link.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
    }

    func makeSnow() {
        if self.imageArray.count > 0 {
            var imageView = self.imageArray[0]
            self.imageArray.removeAtIndex(0)
            self.snowFall(imageView)
        }
    }

    func snowFall (imageView:UIImageView)
    {
            UIView.animateWithDuration(5, animations: { () -> Void in
            imageView.frame = CGRectMake(imageView.frame.origin.x, self.screenHeight, imageView.frame.size.width, imageView.frame.size.height)
            imageView.transform = CGAffineTransformMakeScale(0.3, 0.3);
            imageView.transform = CGAffineTransformRotate(imageView.transform,CGFloat(M_PI))
            },
            completion: { finished in
                var  x =  (arc4random()%20 + 10)
                imageView.frame = CGRectMake(CGFloat((arc4random()%UInt32(UIScreen.mainScreen().bounds.size.width))),CGFloat(-30), CGFloat(x), CGFloat(x))
                self.imageArray.append(imageView)
        })
    }
}
發佈了190 篇原創文章 · 獲贊 12 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章