今天真是閒來無事,隨便看了一下蘋果官方的Swift教程。其實也僅僅是看了第一章內容,記住了一點幾本的語法。
然後想起昨天自己沒事寫的大雪紛飛的動畫,自己就拿起來練一下手。
說真的做Demo的時候還真遇到幾個比較棘手的問題。
- Swift是強類型語言,對沒有隱式的數據類型的轉換,也就是說,即使是 Float/Int這種運算都會報錯,需要你自己轉換成相同的數據類型。
- Swift中沒有block的概念,不過Swift語言中的函數功能及其強大,可以當參數,可以當做返回值。也就是說可以用函數完全取代block。
- 要習慣點語法,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)
})
}
}