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  ViewController UIViewController  {
 
     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 ? [[ String String ]] {
                 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值