แก้ไข: คำตอบใหม่ที่ใช้งานได้ในทุกทิศทาง
คำตอบดั้งเดิมจะใช้ได้เมื่ออินเตอร์เฟสอยู่ในแนวตั้งเท่านั้น นี่คือภาพเคลื่อนไหวการเปลี่ยนมุมมอง b / c ที่แทนที่มุมมองที่มีมุมมองที่แตกต่างกันจะต้องเกิดขึ้นกับมุมมองอย่างน้อยระดับต่ำกว่ามุมมองแรกที่เพิ่มเข้าไปในหน้าต่าง (เช่นwindow.rootViewController.view.anotherView
)
TransitionController
ฉันได้ดำเนินการผมระดับภาชนะที่เรียกกันแบบง่ายๆ คุณสามารถค้นหาได้ที่https://gist.github.com/1394947
นอกเหนือจากนี้ฉันชอบการนำไปใช้ในคลาส b / c ที่แยกต่างหากซึ่งง่ายต่อการใช้ซ้ำ หากคุณไม่ต้องการสิ่งนั้นคุณสามารถใช้ตรรกะเดียวกันได้โดยตรงในตัวแทนแอพของคุณโดยไม่จำเป็นต้องมีTransitionController
คลาส ตรรกะที่คุณต้องการจะเหมือนกันอย่างไรก็ตาม
ใช้มันดังต่อไปนี้:
ในแอพของคุณ
// add a property for the TransitionController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MyViewController *vc = [[MyViewContoller alloc] init...];
self.transitionController = [[TransitionController alloc] initWithViewController:vc];
self.window.rootViewController = self.transitionController;
[self.window makeKeyAndVisible];
return YES;
}
เมื่อต้องการเปลี่ยนไปใช้ตัวควบคุมมุมมองใหม่จากตัวควบคุมมุมมองใด ๆ
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
แก้ไข: คำตอบเดิมด้านล่าง - ใช้งานได้สำหรับการวางแนว portait เท่านั้น
ฉันทำสมมติฐานต่อไปนี้สำหรับตัวอย่างนี้:
คุณมีตัวควบคุมมุมมองที่กำหนดเป็นrootViewController
หน้าต่างของคุณ
เมื่อคุณเปลี่ยนเป็นมุมมองใหม่คุณต้องการแทนที่ viewController ปัจจุบันด้วย viewController ที่เป็นเจ้าของมุมมองใหม่ เมื่อใดก็ตามที่ viewController ปัจจุบันเท่านั้นยังมีชีวิตอยู่ (เช่น alloc'ed)
รหัสสามารถแก้ไขได้อย่างง่ายดายเพื่อให้ทำงานแตกต่างกันจุดสำคัญคือการเปลี่ยนแปลงภาพเคลื่อนไหวและตัวควบคุมมุมมองเดียว window.rootViewController
ตรวจสอบให้แน่ใจว่าคุณไม่รักษาตัวควบคุมมุมมองที่ใดก็ได้นอกของการกำหนดมัน
รหัสเพื่อการเปลี่ยนแปลงภาพเคลื่อนไหวในตัวแทนแอพ
- (void)transitionToViewController:(UIViewController *)viewController
withTransition:(UIViewAnimationOptions)transition
{
[UIView transitionFromView:self.window.rootViewController.view
toView:viewController.view
duration:0.65f
options:transition
completion:^(BOOL finished){
self.window.rootViewController = viewController;
}];
}
ตัวอย่างการใช้งานในตัวควบคุมมุมมอง
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}