我想從側面呈現UIViewController。 現在的Modal可以做的唯一事情就是Verticle Slide in。從側面呈現UIViewController
任何機構對此有什麼想法?
讓我知道」感謝
我想從側面呈現UIViewController。 現在的Modal可以做的唯一事情就是Verticle Slide in。從側面呈現UIViewController
任何機構對此有什麼想法?
讓我知道」感謝
要成爲肛門關於MVC,它真的是查看你的移動而不是控制器。
我會建議這樣做的方式是使用導航控制器,它的動畫是默認的水平幻燈片,您可以免費獲得導航堆棧 - 這意味着您有後退按鈕自動生成,標題和按鈕屬性,你可以設置,雖然這些可以很容易隱藏是理想的。
使用導航控制器:
創建您的父母控制器,塞斯,分配一個UINavigationsController財產,並適當初始化它。然後,您可以按照您想要的任何順序加載控制器,並在導航後查看。
Here是NavControllers(通常他們是使用UITableViewControllers但不必是)
鵬的例子是動畫,我要指出,它消除了父視圖一個很好的教程(並根據您的設計可能不會只是刪除'currentView' - 因爲你的/一個頂視圖可能是一個子視圖),所以如果你導航回你將不得不自己處理這個。
呃...你是關於MVC模式的肛門嗎? – JustSid 2010-12-19 21:16:28
只是提出一點,你不從側面呈現'控制器'' – 2010-12-19 21:18:47
我這樣做,它的工作,雖然我不知道是否有一個更正式的方式做到這一點(UIVIewAimationTransition沒有一個幻燈片選項):
UIView *currentView = self.view;
UIView *theWindow = [currentView superview];
[currentView removeFromSuperview];
CATransition *animation = [CATransition animation];
[animation setDuration:0.5];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromLeft];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];
我剛剛給出了另一個非常相似的SO問題的答案,但在這裏它再次,以防人們在這裏查找最終結果。
所有在我的應用程序的ViewControllers從MyViewController
繼承它,此外還有一些其他的默認行爲,有此屬性:
@property(readwrite, nonatomic) BOOL slideFromSide;
而這種代碼:
- (void) presentViewController: (UIViewController*) vc animated: (BOOL) flag completion: (void (^)(void)) completion
{
BOOL slideIn = NO;
if ([vc isKindOfClass: [MyViewController class]])
{
MyViewController *svc = (MyViewController*) vc;
slideIn = svc.slideFromSide;
}
if (slideIn)
{
[self addChildViewController: vc];
[self.view addSubview: vc.view];
CGRect frame = vc.view.frame;
frame.origin.x = frame.size.width;
vc.view.frame = frame;
frame.origin.x = 0;
[UIView animateWithDuration: 0.33
animations: ^{
vc.view.frame = frame;
}
];
}
else
{
[super presentViewController: vc animated: flag completion: completion];
}
}
- (IBAction) backAction: (id) sender
{
if (_slideFromSide)
{
CGRect frame = self.view.frame;
frame.origin.x = frame.size.width;
[UIView animateWithDuration: 0.33
animations: ^{
self.view.frame = frame;
}
completion:^(BOOL finished) {
[self removeFromParentViewController];
}
];
}
else
{
[self dismissViewControllerAnimated: YES completion: nil];
}
}
然後,在ViewControllers我想滑入,我有:
- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
if (self)
{
self.slideFromSide = YES;
// Whatever else you want to do
}
return self;
}
調用一個新的ViewController就像正常:
WhateverViewController *vc = [WhateverViewController alloc] initWithNibName: nil bundle: nil];
[self presentViewController: vc animated: YES completion: nil];
你真的應該接受一些答案! 0%的接受率是非常糟糕的,它會阻止人們幫助你。 – JustSid 2010-12-19 20:54:00
真的,我感覺節日,但:D – 2010-12-19 21:17:35
不知道你的意思只是' – Franky 2010-12-21 01:50:23