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

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

解决方案

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,786评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 它像一块来自史前文明的纪念碑,碑文类似于楔形文字,又像失去方向感四处乱窜的蚂蚁,总之没人能读懂它。由于人类对未知的...
    某飒阅读 399评论 0 2
  • 奔涌 尘埃 背上厚重的壳 年轮密布 愈加沉重 被紧紧压伏 嗅着泥土 芬芳馥郁 难掩我心中的恶臭 瘦弱的腿 挣扎着颤...
    立生阅读 264评论 1 4
  • 情景:app-点击banner-打开A页面(点击A某个按钮跳转)-B页面(点击B某个按钮跳转)-C页面(点击C某个...
    麦子_FE阅读 652评论 0 0