在我的应用中,我正在尝试使用LWSlideShow制作滑块LWSlideShow 在尝试解决方案here之后,从我的服务器获取图像的来源我遇到了错误,表示不平衡的调用,这意味着我在解决了这个问题之后未完成动画的视图上呈现模态视图把动画放到没有我现在的splashView将在这里下载图像之前被解雇是我的代码进一步解释:
- (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];
}
你也可以从代码中看到我也尝试使用viewWillAppear同样的事情发生了我想要的是当下载图像时splashView需要被解雇我不知道我做错了什么
答案 0 :(得分:3)
在viewDidAppear之前随时从VC运行该代码(如viewDidLoad,viewWillAppear)将导致您描述的问题。但是,您可能不希望幻灯片放映视图出现 - 即使是瞬间 - 直到您完成获取资产。这是一个常见问题。
解决方案是实现"闪屏"并且网络任务不仅仅是前言,它们与幻灯片放映一样,都是您的应用程序的一部分。
修改强> 将Splash vc作为应用程序在故事板中的初始视图控制器。现在,幻灯片放映vc可能看起来像这样:
取消选中"是初始视图控制器"复选框,找到你的启动视图控制器(在同一个故事板中,我希望)并检查它的框作为初始视图控制器。现在,您的应用程序将在启动vc上启动,就像您想要的那样。
当flash vc完成后,它可以呈现幻灯片放映vc,或者它甚至可以将自己(用幻灯片放映)替换为应用程序窗口的根目录。
要替换用户界面,我会使用此代码段的变体...
// 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];