From ccb3c2f4533fa52da474c33a7adc5ab5a887a805 Mon Sep 17 00:00:00 2001 From: Thejaswi Puthraya Date: Thu, 26 Nov 2015 15:42:25 +0530 Subject: [PATCH] CB-10079 Splashscreen plugin does not honor SplashScreenDelay on iOS Github: close #64 --- src/ios/CDVSplashScreen.m | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/ios/CDVSplashScreen.m b/src/ios/CDVSplashScreen.m index 76b1c9f..c1c109a 100644 --- a/src/ios/CDVSplashScreen.m +++ b/src/ios/CDVSplashScreen.m @@ -331,6 +331,9 @@ float fadeDuration = fadeSplashScreenDuration == nil ? kSplashScreenDurationDefault : [fadeSplashScreenDuration floatValue]; + id splashDurationString = [self.commandDelegate.settings objectForKey: [@"SplashScreenDelay" lowercaseString]]; + float splashDuration = splashDurationString == nil ? kSplashScreenDurationDefault : [splashDurationString floatValue]; + if (fadeSplashScreenValue == nil) { fadeSplashScreenValue = @"true"; @@ -340,7 +343,7 @@ { fadeDuration = 0; } - else if(fadeDuration < 30) + else if (fadeDuration < 30) { // [CB-9750] This value used to be in decimal seconds, so we will assume that if someone specifies 10 // they mean 10 seconds, and not the meaningless 10ms @@ -354,26 +357,29 @@ [self createViews]; } } - else if (fadeDuration == 0) + else if (fadeDuration == 0 && splashDuration == 0) { [self destroyViews]; } else { __weak __typeof(self) weakSelf = self; - [UIView transitionWithView:self.viewController.view - duration:(fadeDuration / 1000) - options:UIViewAnimationOptionTransitionNone - animations:^(void) { - [weakSelf hideViews]; - } - completion:^(BOOL finished) { - if (finished) { - [weakSelf destroyViews]; - // TODO: It might also be nice to have a js event happen here -jm - } - } - ]; + float effectiveSplashDuration = (splashDuration - fadeDuration) / 1000; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (uint64_t) effectiveSplashDuration * NSEC_PER_SEC), dispatch_get_main_queue(), CFBridgingRelease(CFBridgingRetain(^(void) { + [UIView transitionWithView:self.viewController.view + duration:(fadeDuration / 1000) + options:UIViewAnimationOptionTransitionNone + animations:^(void) { + [weakSelf hideViews]; + } + completion:^(BOOL finished) { + if (finished) { + [weakSelf destroyViews]; + // TODO: It might also be nice to have a js event happen here -jm + } + } + ]; + }))); } } }