2016-05-16 64 views
0

在我的应用程序我试图使用滑块使用LWSlideShow LWSlideShow 图像的来源从我的服务器尝试解决方案后取回here我卡住了错误,说不平衡的呼叫这意味着我提出了一个模式的观点,没有完成他的动画解决这个问题后,通过把动画放在没有splashView,我将出现在图像下载之前将被解雇这里是我的代码作进一步解释:显示启动画面,而下载图像从服务器在ios

- (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同样的事情发生了什么我wan t是什么时候下载图像splashView需要被解雇我不知道我在做什么错

回答

3

在viewDidAppear(如viewDidLoad,viewWillAppear)之前随时从VC运行该代码将导致您描述的问题。但是,您可能不希望幻灯片放映视图出现 - 即使是在一瞬间 - 直到您完成提取资产。这是一个常见问题。

解决方案是意识到“闪屏”和网络任务不仅仅是序言,它们与幻灯片一样是应用程序的一部分。

编辑 让那个Splash vc成为故事板中应用的初始视图控制器。眼下,幻灯片播放VC大概是这样的:

enter image description here

取消选中“在初始视图控制器”复选框,找到你的飞溅视图控制器(在同一个故事板,我希望),并检查它的框成为初始视图控制器。现在你的应用程序将启动飞溅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]; 
+0

可以提供有关如何解决我的问题 –

+0

详情哪一部分没有我不解释还不够吗? – danh

+0

使该Splash vc成为故事板中应用程序的初始视图控制器。完成后,它可以呈现幻灯片放映vc,或者甚至可以将其自身(以幻灯片放映)替换为应用程序窗口的根。 –