在ios中从服务器下载图像时显示启动屏幕
在我的应用程序中,我尝试使用LWSlideShow制作一个滑块 图像源是在尝试解决方案后从我的服务器上获取的。我遇到了错误,这表示调用不平衡,这意味着我在一个视图上呈现一个模式视图,该视图在通过将动画设置为“否”解决此问题后未完成其动画。我呈现的splashView将在图像下载之前被取消以下是我的代码以作进一步解释:在ios中从服务器下载图像时显示启动屏幕,ios,objective-c,splash-screen,Ios,Objective C,Splash Screen,在我的应用程序中,我尝试使用LWSlideShow制作一个滑块 图像源是在尝试解决方案后从我的服务器上获取的。我遇到了错误,这表示调用不平衡,这意味着我在一个视图上呈现一个模式视图,该视图在通过将动画设置为“否”解决此问题后未完成其动画。我呈现的splashView将在图像下载之前被取消以下是我的代码以作进一步解释: - (IBAction)goDownload { UIViewController *vc = [self.storyboard instantiateViewCont
- (IBAction)goDownload {
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Splash"];
[self.navigationController presentViewController:vc animated:YES completion:nil];
dispatch_async(dispatch_get_main_queue(), ^{
NSMutableArray *array = [@[] mutableCopy];
LWSlideItem *item = [LWSlideItem itemWithCaption:@""
imageUrl:@"http://code-bee.net/geeks/images/cover-1.jpg"];
[array addObject:item];
item = [LWSlideItem itemWithCaption:@""
imageUrl:@"http://code-bee.net/geeks/images/cover-2.jpg"];
[array addObject:item];
item = [LWSlideItem itemWithCaption:@""
imageUrl:@"http://code-bee.net/geeks/images/cover-3.jpg"];
[array addObject:item];
LWSlideShow *slideShow = [[LWSlideShow alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 120)];
slideShow.autoresizingMask = UIViewAutoresizingFlexibleWidth;
//slideShow.delegate = self;
[self.view addSubview:slideShow];
slideShow.slideItems = array;
if ([slideShow.slideItems count] == [array count]) {
[self dismissViewControllerAnimated:YES completion:nil];
}
});
}
//
//-(void)viewWillAppear:(BOOL)animated
//{
//
// UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Splash"];
// [self.navigationController presentViewController:vc animated:YES completion:nil];
//}
- (void)viewDidLoad {
[super viewDidLoad];
[self goDownload];
}
另外,你可以从代码中看到,我也尝试使用ViewWillEmerge。同样的事情发生了。我想要的是,当图像下载时,splashView需要取消。我不知道我做错了什么。在ViewDidEmerge(如viewDidLoad,ViewWillEmerge)出现之前的任何时候,从VC运行该代码都会导致您描述的问题。但是,在提取完资产之前,您可能不希望幻灯片放映视图出现,即使是一瞬间。这是一个常见的问题 解决方案是认识到“启动屏幕”和网络任务不仅仅是序言,它们与幻灯片一样,也是应用程序的一部分 编辑
在情节提要中将该应用程序的初始视图控制器设置为Splash vc。现在,vc的幻灯片可能是这样的: 取消选中“是初始视图控制器”复选框,找到您的初始视图控制器(我希望在同一个故事板中),并选中它作为初始视图控制器的复选框。现在,你的应用程序将在splash vc上启动,就像你想要的那样 当启动vc完成时,它可以显示幻灯片放映vc,甚至可以将自己(用幻灯片放映)替换为应用程序窗口的根 为了替换UI,我使用了这个片段的变体
// in the splash vc, after all of the asset loading is complete
// give what used to be your initial view controller a storyboard id
// like @"MySlideShowUI"
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MySlideShowUI"];
UIWindow *window = [UIApplication sharedApplication].delegate.window;
window.rootViewController = vc;
[UIView transitionWithView:window
duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations:nil
completion:nil];
在ViewDidDisplay(如viewDidLoad、ViewWillDisplay)出现之前的任何时候从VC运行该代码都会导致您描述的问题。但是,在提取完资产之前,您可能不希望幻灯片放映视图出现,即使是一瞬间。这是一个常见的问题 解决方案是认识到“启动屏幕”和网络任务不仅仅是序言,它们与幻灯片一样,也是应用程序的一部分 编辑
在情节提要中将该应用程序的初始视图控制器设置为Splash vc。现在,vc的幻灯片可能是这样的: 取消选中“是初始视图控制器”复选框,找到您的初始视图控制器(我希望在同一个故事板中),并选中它作为初始视图控制器的复选框。现在,你的应用程序将在splash vc上启动,就像你想要的那样 当启动vc完成时,它可以显示幻灯片放映vc,甚至可以将自己(用幻灯片放映)替换为应用程序窗口的根 为了替换UI,我使用了这个片段的变体
// in the splash vc, after all of the asset loading is complete
// give what used to be your initial view controller a storyboard id
// like @"MySlideShowUI"
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MySlideShowUI"];
UIWindow *window = [UIApplication sharedApplication].delegate.window;
window.rootViewController = vc;
[UIView transitionWithView:window
duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations:nil
completion:nil];
你能提供更多关于如何解决我的问题的细节吗?我对哪一部分解释得不够充分?在情节提要中,让应用程序的初始视图控制器成为Splash vc。完成后,它可以展示幻灯片,甚至可以替换自己(用幻灯片)作为应用程序窗口的根。如果你知道uber应用程序在你启动应用程序时会有一个启动屏幕,直到数据加载完毕,然后如何返回Tabbar控制器。你能提供更多关于如何解决我的问题的详细信息吗?哪一部分我解释得不够?让该启动vc成为故事板中应用程序的初始视图控制器。完成后,它可以呈现幻灯片放映vc,甚至可以将自己(用幻灯片放映)替换为应用程序窗口的根。如果你知道uber应用程序在你启动应用程序时会出现一个启动屏幕,直到数据加载完毕,然后如何返回Tabbar控制器