iOS - 為你的啟動頁添加動畫

本文為參考學(xué)習(xí)的文章,在閱讀這位作者的源碼之后學(xué)習(xí)到的一個小方法。

解決方案

在 iOS 中,為應(yīng)用設(shè)置啟動頁非常簡單。按照 Apple 的意思,啟動頁應(yīng)當(dāng)盡可能的與首屏相似,并且盡可能的避免使用啟動動畫。但是有時候我們想讓啟動頁稍微豐富一些,為它添加一些事情。

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

在 AppDelegate 中的

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

方法中添加動畫效果,具體實(shí)現(xiàn)如下:

  • 獲取 LaunchScreen 中的 view(這需要你的應(yīng)用啟動頁設(shè)置為 LaunchScreen)
UIViewController *viewController = [[UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil] instantiateViewControllerWithIdentifier:@"LaunchScreen"];
UIView *launchView = viewController.view;
  • 將 view 添加到 window 上
[self.window addSubview:launchView];
  • 實(shí)現(xiàn) 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 放大顯示并且同時消失,記得在動畫結(jié)束時將 view 移除掉。

新的小方法是(swift)

上述方法將啟動頁的 ViewController 拿到,所以可以將其上的多個控件一起處理,形成比較和諧的效果。但是也有很多啟動頁都由一張圖片構(gòu)成,所以在這里,我們可以直接拿到圖片,進(jìn)行處理。

  • 一個獲取啟動圖片的函數(shù)(這謎一般的對齊)

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,設(shè)置圖片

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()
        }
    }

  • 動畫處理,同上。

遇到的問題

在處理第二種方案時,發(fā)現(xiàn)這個動畫只能加在 Initial View Controller 中,否則動畫沒有效果。

總結(jié)

其實(shí)在 LaunchScreen 配置啟動頁較為簡便,只需要一個圖片即可,并且可以控制各個控件,相對靈活。但是剛剛打開之前的代碼運(yùn)行時發(fā)現(xiàn)一個問題。。。各取所需吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,048評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,338評論 4 61
  • 它像一塊來自史前文明的紀(jì)念碑,碑文類似于楔形文字,又像失去方向感四處亂竄的螞蟻,總之沒人能讀懂它。由于人類對未知的...
    某颯閱讀 420評論 0 2
  • 奔涌 塵埃 背上厚重的殼 年輪密布 愈加沉重 被緊緊壓伏 嗅著泥土 芬芳馥郁 難掩我心中的惡臭 瘦弱的腿 掙扎著顫...
    立生閱讀 283評論 1 4
  • 情景:app-點(diǎn)擊banner-打開A頁面(點(diǎn)擊A某個按鈕跳轉(zhuǎn))-B頁面(點(diǎn)擊B某個按鈕跳轉(zhuǎn))-C頁面(點(diǎn)擊C某個...
    麥子_FE閱讀 711評論 0 0

友情鏈接更多精彩內(nèi)容