Swift - 啓動畫面放大淡出效果的實現1(使用launch image)

Swift - 啓動畫面放大淡出效果的實現1(使用launch image)

在之前的文章中:Swift - 延長啓動圖片的顯示時間(LaunchImage)。介紹了通過在 viewDidLoad 方法中添加個線程休眠,可以延長啓動圖片的顯示時間。但時間一到,整個啓動頁面就會直接消失,略顯生硬。
本文演示如何讓啓動畫面消失的時候有動畫效果。

1,效果圖如下:
啓動頁面會放大淡出直至消失,整個過渡漸變更加自然。
  原文:Swift - 啓動畫面放大淡出效果的實現1(使用launch image)    原文:Swift - 啓動畫面放大淡出效果的實現1(使用launch image)    原文:Swift - 啓動畫面放大淡出效果的實現1(使用launch image)

2,實現原理:
我們知道啓動頁通常有兩種方式實現。一種是使用 LaunchImage 來設置,另一種是使用 LaunchScreen.storyboard
不管哪種方式,我們都不能直接在它上面做動畫。我們可以在程序載入後,往頁面上再添加一個同啓動頁一樣的視圖。由於內容一樣,時間又銜接在一起,用戶看不出其實啓動頁面已經被替換掉。
最後,我們在新添加的視圖上做動畫即可。

3,本文先介紹使用LaunchImage實現啓動圖片的情況:
下圖可以看出,我們已經在 Assets.xcassets 文件中添加了適應各種設備的啓動圖片。
原文:Swift - 啓動畫面放大淡出效果的實現1(使用launch image)

下面是完整代碼。關鍵在於當程序啓動後,我們要根據設備的尺寸和方向,自動獲取相應的啓動圖片來顯示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import UIKit
 
class ViewControllerUIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //播放啓動畫面動畫
        launchAnimation()
    }
     
    //播放啓動畫面動畫
    private func launchAnimation() {
        let statusBarOrientation = UIApplication.sharedApplication().statusBarOrientation
        if let img = splashImageForOrientation(statusBarOrientation,
                                               size: self.view.bounds.size) {
            //獲取啓動圖片
            let launchImage = UIImage(named: img)
            let launchview = UIImageView(frame: UIScreen.mainScreen().bounds)
            launchview.image = launchImage
            //將圖片添加到視圖上
            //self.view.addSubview(launchview)
            let delegate = UIApplication.sharedApplication().delegate
            let mainWindow = delegate?.window
            mainWindow!!.addSubview(launchview)
             
            //播放動畫效果,完畢後將其移除
            UIView.animateWithDuration(1, delay: 1.5, options: .BeginFromCurrentState,
                                       animations: {
                launchview.alpha = 0.0
                launchview.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.5, 1.5, 1.0)
            }) { (finished) in
                launchview.removeFromSuperview()
            }
        }
    }
     
    //獲取啓動圖片名(根據設備方向和尺寸)
    func splashImageForOrientation(orientation: UIInterfaceOrientation, size: CGSize) -> String?{
        //獲取設備尺寸和方向
        var viewSize = size
        var viewOrientation = "Portrait"
         
        if UIInterfaceOrientationIsLandscape(orientation) {
            viewSize = CGSizeMake(size.height, size.width)
            viewOrientation = "Landscape"
        }
         
        //遍歷資源庫中的所有啓動圖片,找出符合條件的
        if let imagesDict = NSBundle.mainBundle().infoDictionary  {
            if let imagesArray = imagesDict["UILaunchImages"as? [[StringString]] {
                for dict in imagesArray {
                    if let sizeString = dict["UILaunchImageSize"],
                        let imageOrientation = dict["UILaunchImageOrientation"] {
                        let imageSize = CGSizeFromString(sizeString)
                        if CGSizeEqualToSize(imageSize, viewSize)
                            && viewOrientation == imageOrientation {
                            if let imageName = dict["UILaunchImageName"] {
                                return imageName
                            }
                        }
                    }
                }
            }
        }
         
        return nil
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

原文出自:www.hangge.com  轉載請保留原文鏈接:http://www.hangge.com/blog/cache/detail_1246.html
發佈了14 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章