我是一名创建Apache Cordova应用程序的Web开发人员,因此我对Objective-C的了解非常少。一切都很顺利,直到我尝试用视频补充启动画面。它有点做,但不完全..它首先显示Default.png,然后是SplashScreenLoader。它然后实际播放视频,我知道这是因为音频被发射,但视频层没有显示。
我发现self.window或self.viewController都是在didFinishLaunchingWithOptions中定义的,因此它们不存在于 - (id)init方法中。因此,我无法找到一种方法将它置于加载飞溅之上。
我的init方法目前在AppDelegate.m中看起来像这样:
- (id) init {
NSString *moviePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Splash_v1.mp4"];
NSURL *movieURL = [NSURL fileURLWithPath:moviePath];
MPMoviePlayerController* moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: movieURL];
moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.view setFrame: self.window.bounds];
[self.window addSubview:moviePlayer.view];
[self.window makeKeyAndVisible];
[moviePlayer play];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
[CDVURLProtocol registerURLProtocol];
return [super init];
}
这里self.window为null,我也试图用这段代码设置self.window:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.window = [[[UIWindow alloc] initWithFrame:screenBounds] autorelease];
......没有优先权。它实际设置它,但对于后续代码,它不想这样做。
所以我想知道的是,在didFinishLaunchingWithOptions开始之前,我如何将这个视频置于启动内容之上?
提前致谢, //彼得
答案 0 :(得分:2)
所以我想知道的是,在didFinishLaunchingWithOptions开始之前,我如何将这个视频置于启动内容之上?
实际上,你是在didFinishLaunchingWithOptions
中做到的。把这些语句放在那里(在Xcode为你生成的bolierplate代码中,你应该已经调用了makeKeyAndVisible
,所以只需补充它):
[self.window addSubview:moviePlayer.view];
[self.window makeKeyAndVisible];
之前已实例化过moviePlayer。
避免空白屏幕的一种方法是:
创建一个包含Default.png图像的UIImageView;
通过将它作为子视图添加到你的self.window来显示这样的UIImageView(这不会产生黑屏效果);
初始化你的播放器(我认为它需要一些时间,因此黑屏)并将其添加到UIImageView下面;
当玩家准备就绪(viewDidLoad
)时,将其推到UIImageView的顶部。
最后,我不知道你的播放器将如何表示视频播放的结束,但我认为你有一些委托方法;让你appDelegate也是你的玩家代表,从那里,从self.window中删除UIImageView和播放器,并将你的其他视图添加到self.window。
希望这有帮助。
编辑:
这是我在你的app appid appDidFinishLaunching中尝试做的粗略草图:
self.moviePlayer = <INIT MOVIEW PLAYER CONTROLLER>
self.backgroundImage = <INIT UIImageView with Default.png>
[self.window addSubview:self.moviePlayer.view];
[self.window addSubview:self.backgroundImage];
[self.window makeKeyAndVisible];
在你的电影播放器viewDidLoad中:
- (void)viewDidLoad {
[super viewDidLoad];
...
[self.view.superview addSubview:self.view]; //-- this will just move the player view to the top
...
}
答案 1 :(得分:1)
如果这有助于其他任何人,我有同样的问题,通过移动'[self.window makeKeyAndVisible];像这样的子视图,所以在appdelegate.m:
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
myView.backgroundColor = [UIColor blueColor];
[self.window makeKeyAndVisible];
[self.window addSubview:myView];
这样可以正常工作,但如果我交换最后两个语句,子视图就不会显示。