|
@@ -115,9 +115,7 @@ int main(int argc, char **argv) |
|
|
return image; |
|
|
} |
|
|
|
|
|
@implementation SDLLaunchScreenController { |
|
|
UIInterfaceOrientationMask supportedOrientations; |
|
|
} |
|
|
@implementation SDLLaunchScreenController |
|
|
|
|
|
- (instancetype)init |
|
|
{ |
|
@@ -127,18 +125,16 @@ - (instancetype)init |
|
|
|
|
|
NSBundle *bundle = [NSBundle mainBundle]; |
|
|
NSString *screenname = [bundle objectForInfoDictionaryKey:@"UILaunchStoryboardName"]; |
|
|
|
|
|
/* Normally we don't want to rotate from the initial orientation. */ |
|
|
supportedOrientations = (1 << [UIApplication sharedApplication].statusBarOrientation); |
|
|
BOOL atleastiOS8 = UIKit_IsSystemVersionAtLeast(8.0); |
|
|
|
|
|
/* Launch screens were added in iOS 8. Otherwise we use launch images. */ |
|
|
if (screenname && UIKit_IsSystemVersionAtLeast(8.0)) { |
|
|
if (screenname && atleastiOS8) { |
|
|
@try { |
|
|
self.view = [bundle loadNibNamed:screenname owner:self options:nil][0]; |
|
|
} |
|
|
@catch (NSException *exception) { |
|
|
/* iOS displays a blank screen rather than falling back to an image, |
|
|
* if a launch screen name is specified but it fails to load. */ |
|
|
/* If a launch screen name is specified but it fails to load, iOS |
|
|
* displays a blank screen rather than falling back to an image. */ |
|
|
return nil; |
|
|
} |
|
|
} |
|
@@ -216,13 +212,37 @@ - (instancetype)init |
|
|
} |
|
|
|
|
|
if (image) { |
|
|
if (image.size.width > image.size.height) { |
|
|
supportedOrientations = UIInterfaceOrientationMaskLandscape; |
|
|
} else { |
|
|
supportedOrientations = UIInterfaceOrientationMaskPortrait; |
|
|
UIImageView *view = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds]; |
|
|
UIImageOrientation imageorient = UIImageOrientationUp; |
|
|
|
|
|
/* Bugs observed / workaround tested in iOS 8.3, 7.1, and 6.1. */ |
|
|
if (UIInterfaceOrientationIsLandscape(curorient)) { |
|
|
if (atleastiOS8 && image.size.width < image.size.height) { |
|
|
/* On iOS 8, portrait launch images displayed in forced- |
|
|
* landscape mode (e.g. a standard Default.png on an iPhone |
|
|
* when Info.plist only supports landscape orientations) need |
|
|
* to be rotated to display in the expected orientation. */ |
|
|
if (curorient == UIInterfaceOrientationLandscapeLeft) { |
|
|
imageorient = UIImageOrientationRight; |
|
|
} else if (curorient == UIInterfaceOrientationLandscapeRight) { |
|
|
imageorient = UIImageOrientationLeft; |
|
|
} |
|
|
} else if (!atleastiOS8 && image.size.width > image.size.height) { |
|
|
/* On iOS 7 and below, landscape launch images displayed in |
|
|
* landscape mode (e.g. landscape iPad launch images) need |
|
|
* to be rotated to display in the expected orientation. */ |
|
|
if (curorient == UIInterfaceOrientationLandscapeLeft) { |
|
|
imageorient = UIImageOrientationLeft; |
|
|
} else if (curorient == UIInterfaceOrientationLandscapeRight) { |
|
|
imageorient = UIImageOrientationRight; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
self.view = [[UIImageView alloc] initWithImage:image]; |
|
|
/* Create the properly oriented image. */ |
|
|
view.image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:imageorient]; |
|
|
|
|
|
self.view = view; |
|
|
} |
|
|
} |
|
|
|
|
@@ -234,9 +254,18 @@ - (void)loadView |
|
|
/* Do nothing. */ |
|
|
} |
|
|
|
|
|
- (BOOL)shouldAutorotate |
|
|
{ |
|
|
/* If YES, the launch image will be incorrectly rotated in some cases. */ |
|
|
return NO; |
|
|
} |
|
|
|
|
|
- (NSUInteger)supportedInterfaceOrientations |
|
|
{ |
|
|
return supportedOrientations; |
|
|
/* We keep the supported orientations unrestricted to avoid the case where |
|
|
* there are no common orientations between the ones set in Info.plist and |
|
|
* the ones set here (it will cause an exception in that case.) */ |
|
|
return UIInterfaceOrientationMaskAll; |
|
|
} |
|
|
|
|
|
@end |
|
|