2013-05-20 29 views
4

我使用ECSliding,我有這個問題!ECSlidingViewController問題與topview動畫

在我的項目有此文件:

InitViewController(ECSlidingController)

FirstViewController(UIViewController中)

SecondViewController(UIViewController中)

LeftMenuViewController(UIViewController中)

我用InitView到instatiate我的firstView的俯視圖。

在我的FirstView中有一個按鈕,當按下時將SecondView設置爲頂視圖。

是否有可能爲更改頂視圖設置動畫效果,就像我正在打開新視圖一樣? 或者我如何打開一個像第一個使用ECSliding的新視圖?

我使用此代碼更改冠捷:

self.slidingViewController.topViewController = second; 
[self.slidingViewController resetTopView]; 

,我想可能只是默認的動畫,如:

[self presentViewController:(*UIViewController) animated:YES completion:nil]; 

回答

0

可能是你最好的選擇是使用滑動視圖控制器的動畫方法。在完成塊中更改頂部視圖控制器(至第二個),然後開始一個新的動畫以將頂部視圖重新設置回屏幕。

[self.slidingViewController anchorTopViewOffScreenTo:... 
              animations:... 
              onComplete:^{ 
    self.slidingViewController.topViewController = second; 
    [self.slidingViewController resetTopView]; 
}]; 
+0

我該怎麼做?你能輕輕地寫出一些通用代碼來幫助我理解嗎? – Tortuga

+0

我試過了,但什麼也沒有!該視圖會消失並保留在我的左側或右側菜單中,具體取決於我使用的是哪個(ECSide)。你能如此溫柔地爲我的案例編寫特定的代碼嗎?我真的很感激! – Tortuga

+0

我已經像你寫的那樣做了,並且「視圖消失並保持我的左右菜單,這取決於我使用的是哪一個(ECSide)。」 我添加了: '[self.slidingViewController anchorTopViewOffScreenTo:... 動畫:... onComplete:^ { self.slidingViewController.topViewController = second; [self.slidingViewController resetTopView]; }]; [self.slidingViewController anchorTopViewTo:... 動畫:無 onComplete:nil];' – Tortuga

3

子類ECSlidingViewController。我打電話給我的子類DeckController:

在DeckController.h:

- (void)setTopViewController:(UIViewController *)topViewController withTransition:(CATransition*)transition; 

在DeckController.m:

- (void)setTopViewController:(UIViewController *)topViewController withTransition:(CATransition*)transition { 

    self.topViewController = topViewController; 
    [UIView animateWithDuration:0.25f animations:^() { 
     [[self.view layer] addAnimation:transition forKey:@"topViewTransition"]; 
    }]; 
} 

然後在想要切換到新的頂視圖的視圖控制器,做這樣的事情:

CATransition *animation = [CATransition animation]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromRight]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
[animation setFillMode:kCAFillModeBoth]; 
[animation setDuration:.25]; 

DeckController *deck = (DeckController*)self.slidingViewController; 
[deck setTopViewController:newTopViewController withTransition:animation]; 
+0

這對我來說很好 – Macistador

0

我只是使用相同的操作,當我點擊一個menuitem我的左菜單。

[self.anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{ 
     CGRect frame = self.topViewController.view.frame; 
     self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondVC"]; 
     self.topViewController.view.frame = frame; 
     [self resetTopView]; 
    }]; 

只是概括這一點,你可以稱之爲無處不在。它自己做動畫。 你可以做@Alex,但如果你不必做一些自定義動畫,這就是你所需要的。

注意:在我的例子中,在initViewController中使用這個(爲此, ECSlidingViewController,因此我發送到self),用於強制用戶訪問特定的viewController。如果你需要在你只是發送給self.slidingViewController如下面的例子任何subViewControllers改變看法:

[self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{ 
     CGRect frame = self.slidingViewController.topViewController.view.frame; 
     self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondVC"]; 
     self.slidingViewController.topViewController.view.frame = frame; 
     [self.slidingViewController resetTopView]; 
    }]; 
0

您可以手動創建動畫然後設置topViewController末使滑動視圖控制器處於狀態你的期望。

SecondTopViewController *secondTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondTop"]; 
secondTopViewController.view.frame = self.slidingViewController.view.bounds; 
secondTopViewController.view.alpha = 0; 

// temporarily add the second top view so that we can animate it in. 
[self.slidingViewController.view addSubview:secondTopViewController.view]; 

[UIView animateWithDuration:0.5 animations:^{ 
    secondTopViewController.view.alpha = 1; 
} completion:^(BOOL finished) { 
    // remove the second top view. 
    [secondTopViewController.view removeFromSuperview]; 

    // let sliding view controlller take over from here 
    self.slidingViewController.topViewController = secondTopViewController; 
}]; 

看到我工作的例子:https://github.com/enriquez/ECSlidingViewController/tree/so-16658539

0

@邁克爾·恩裏克斯的回答轉化爲迅速。

let viewController = (self.storyboard?.instantiateViewControllerWithIdentifier("ViewController"))! as? ViewController 
    let navController = UINavigationController(rootViewController: viewController!) 
    navController.view.frame = self.slidingViewController().view.bounds 
    navController.view.alpha = 0 
    self.slidingViewController().view.addSubview(navController.view) 
    UIView.animateWithDuration(0.25, animations: { 
     navController.view.alpha = 1 
     }, completion: {(finished:Bool) -> Void in 
      navController.view.removeFromSuperview() 
      self.slidingViewController().topViewController = navController 
    })