Merge pull request #40766 from naithar/feature/ios-loading_screen
[4.0] [iOS] Native loading screen implementation
This commit is contained in:
commit
6407cdaaf2
|
@ -32,12 +32,20 @@
|
||||||
|
|
||||||
class String;
|
class String;
|
||||||
|
|
||||||
|
@class GodotView;
|
||||||
@protocol DisplayLayer;
|
@protocol DisplayLayer;
|
||||||
@protocol GodotViewRendererProtocol;
|
@protocol GodotViewRendererProtocol;
|
||||||
|
|
||||||
|
@protocol GodotViewDelegate
|
||||||
|
|
||||||
|
- (BOOL)godotViewFinishedSetup:(GodotView *)view;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@interface GodotView : UIView
|
@interface GodotView : UIView
|
||||||
|
|
||||||
@property(assign, nonatomic) id<GodotViewRendererProtocol> renderer;
|
@property(assign, nonatomic) id<GodotViewRendererProtocol> renderer;
|
||||||
|
@property(assign, nonatomic) id<GodotViewDelegate> delegate;
|
||||||
|
|
||||||
@property(assign, readonly, nonatomic) BOOL isActive;
|
@property(assign, readonly, nonatomic) BOOL isActive;
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,7 @@ static const int max_touches = 8;
|
||||||
[self stopRendering];
|
[self stopRendering];
|
||||||
|
|
||||||
self.renderer = nil;
|
self.renderer = nil;
|
||||||
|
self.delegate = nil;
|
||||||
|
|
||||||
if (self.renderingLayer) {
|
if (self.renderingLayer) {
|
||||||
[self.renderingLayer removeFromSuperlayer];
|
[self.renderingLayer removeFromSuperlayer];
|
||||||
|
@ -241,6 +242,14 @@ static const int max_touches = 8;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (self.delegate) {
|
||||||
|
BOOL delegateFinishedSetup = [self.delegate godotViewFinishedSetup:self];
|
||||||
|
|
||||||
|
if (!delegateFinishedSetup) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[self handleMotion];
|
[self handleMotion];
|
||||||
[self.renderer renderOnView:self];
|
[self.renderer renderOnView:self];
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,12 +40,14 @@
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
#import <GameController/GameController.h>
|
#import <GameController/GameController.h>
|
||||||
|
|
||||||
@interface ViewController ()
|
@interface ViewController () <GodotViewDelegate>
|
||||||
|
|
||||||
@property(strong, nonatomic) GodotViewRenderer *renderer;
|
@property(strong, nonatomic) GodotViewRenderer *renderer;
|
||||||
@property(strong, nonatomic) GodotNativeVideoView *videoView;
|
@property(strong, nonatomic) GodotNativeVideoView *videoView;
|
||||||
@property(strong, nonatomic) GodotKeyboardInputView *keyboardView;
|
@property(strong, nonatomic) GodotKeyboardInputView *keyboardView;
|
||||||
|
|
||||||
|
@property(strong, nonatomic) UIView *godotLoadingOverlay;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation ViewController
|
@implementation ViewController
|
||||||
|
@ -62,6 +64,7 @@
|
||||||
self.view = view;
|
self.view = view;
|
||||||
|
|
||||||
view.renderer = self.renderer;
|
view.renderer = self.renderer;
|
||||||
|
view.delegate = self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
|
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
|
||||||
|
@ -97,6 +100,7 @@
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
|
|
||||||
[self observeKeyboard];
|
[self observeKeyboard];
|
||||||
|
[self displayLoadingOverlay];
|
||||||
|
|
||||||
if (@available(iOS 11.0, *)) {
|
if (@available(iOS 11.0, *)) {
|
||||||
[self setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
|
[self setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
|
||||||
|
@ -121,6 +125,31 @@
|
||||||
object:nil];
|
object:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)displayLoadingOverlay {
|
||||||
|
NSBundle *bundle = [NSBundle mainBundle];
|
||||||
|
NSString *storyboardName = @"Launch Screen";
|
||||||
|
|
||||||
|
if ([bundle pathForResource:storyboardName ofType:@"storyboardc"] == nil) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIStoryboard *launchStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:bundle];
|
||||||
|
|
||||||
|
UIViewController *controller = [launchStoryboard instantiateInitialViewController];
|
||||||
|
self.godotLoadingOverlay = controller.view;
|
||||||
|
self.godotLoadingOverlay.frame = self.view.bounds;
|
||||||
|
self.godotLoadingOverlay.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
|
||||||
|
|
||||||
|
[self.view addSubview:self.godotLoadingOverlay];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)godotViewFinishedSetup:(GodotView *)view {
|
||||||
|
[self.godotLoadingOverlay removeFromSuperview];
|
||||||
|
self.godotLoadingOverlay = nil;
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
[self.videoView stopVideo];
|
[self.videoView stopVideo];
|
||||||
|
|
||||||
|
@ -130,6 +159,11 @@
|
||||||
|
|
||||||
self.renderer = nil;
|
self.renderer = nil;
|
||||||
|
|
||||||
|
if (self.godotLoadingOverlay) {
|
||||||
|
[self.godotLoadingOverlay removeFromSuperview];
|
||||||
|
self.godotLoadingOverlay = nil;
|
||||||
|
}
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue