美文网首页
iOS - 为你的启动页添加动画

iOS - 为你的启动页添加动画

作者: 倾兰特 | 来源:发表于2017-06-19 17:15 被阅读1181次

    本文为参考学习的文章,在阅读这位作者的源码之后学习到的一个小方法。

    解决方案

    在 iOS 中,为应用设置启动页非常简单。按照 Apple 的意思,启动页应当尽可能的与首屏相似,并且尽可能的避免使用启动动画。但是有时候我们想让启动页稍微丰富一些,为它添加一些事情。

    在之前,我的做法是(OC)

    在 AppDelegate 中的

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
    

    方法中添加动画效果,具体实现如下:

    • 获取 LaunchScreen 中的 view(这需要你的应用启动页设置为 LaunchScreen)
    UIViewController *viewController = [[UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil] instantiateViewControllerWithIdentifier:@"LaunchScreen"];
    UIView *launchView = viewController.view;
    
    • 将 view 添加到 window 上
    [self.window addSubview:launchView];
    
    • 实现 view 的动画
    [UIView animateWithDuration:1.3f delay:0.1f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        launchView.alpha = 0.0f;
        launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.3f, 1.3f, 1.0f);
    } completion:^(BOOL finished) {
        [launchView removeFromSuperview];
    }];
    

    这里将 view 放大显示并且同时消失,记得在动画结束时将 view 移除掉。

    新的小方法是(swift)

    上述方法将启动页的 ViewController 拿到,所以可以将其上的多个控件一起处理,形成比较和谐的效果。但是也有很多启动页都由一张图片构成,所以在这里,我们可以直接拿到图片,进行处理。

    • 一个获取启动图片的函数(这谜一般的对齐)
    
    func launchImage() -> UIImage {
            
            var launchImage     : UIImage!
            var viewOrientation : String!
            let viewSize        = UIScreen.main.bounds.size
            let orientation     = UIApplication.shared.statusBarOrientation
            //  获取屏幕方向
            if orientation == .landscapeLeft || orientation == .landscapeRight {
                viewOrientation = "Landscape"
            } else {
                viewOrientation = "Portrait"
            }
            let imagesInfo = Bundle.main.infoDictionary!["UILaunchImages"]
                for dic: Dictionary<String, String> in imagesInfo as! Array {
                
                let imageSize = CGSizeFromString(dic["UILaunchImageSize"]!)
                if imageSize.equalTo(viewSize) && viewOrientation == dic["UILaunchImageOrientation"]! as String {
                    
                    launchImage = UIImage(named: dic["UILaunchImageName"]!)
                }
            }
            return launchImage
        }
    
    

    在这里,获取的是 Assets 中的启动页。

    • 在 viewDidLoad() 中添加 UIImageView,设置图片
    
    override func viewDidLoad() {
            super.viewDidLoad()
    
            //  添加启动页
            let launchImageView = UIImageView(frame: self.view.bounds)
            launchImageView.image = self.launchImage()
            view.addSubview(launchImageView)
    
            UIView.animate(withDuration: 1, delay: 1, options: .curveEaseIn, animations: {
                    
                launchImageView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
                launchImageView.alpha = 0
            }) { (finished) in
                
                launchImageView.removeFromSuperview()
            }
        }
    
    
    • 动画处理,同上。

    遇到的问题

    在处理第二种方案时,发现这个动画只能加在 Initial View Controller 中,否则动画没有效果。

    总结

    其实在 LaunchScreen 配置启动页较为简便,只需要一个图片即可,并且可以控制各个控件,相对灵活。但是刚刚打开之前的代码运行时发现一个问题。。。各取所需吧。

    相关文章

      网友评论

          本文标题:iOS - 为你的启动页添加动画

          本文链接:https://www.haomeiwen.com/subject/jbeyqxtx.html