Pembaruan 04/2016: Justed ingin memperbarui ini untuk mengucapkan terima kasih kepada semua orang untuk semua suara. Harap perhatikan juga bahwa ini awalnya ditulis jauh kembali ketika ... sebelum ARC, sebelum kendala, sebelumnya ... banyak hal! Jadi harap pertimbangkan hal ini saat memutuskan apakah akan menggunakan teknik ini. Mungkin ada pendekatan yang lebih modern. Oh, dan jika Anda menemukannya. Harap tambahkan tanggapan agar semua orang dapat melihat. Terima kasih.
Suatu saat nanti ...
Setelah banyak penelitian, saya menemukan dua solusi yang berfungsi. Keduanya bekerja dan melakukan animasi antar tab.
Solusi 1: Transisi dari tampilan (sederhana)
Ini adalah yang termudah dan menggunakan metode transisi UIView yang telah ditentukan sebelumnya. Dengan solusi ini, kami tidak perlu mengelola tampilan karena metode yang berfungsi untuk kami.
// Get views. controllerIndex is passed in as the controller we want to go to.
UIView * fromView = tabBarController.selectedViewController.view;
UIView * toView = [[tabBarController.viewControllers objectAtIndex:controllerIndex] view];
// Transition using a page curl.
[UIView transitionFromView:fromView
toView:toView
duration:0.5
options:(controllerIndex > tabBarController.selectedIndex ? UIViewAnimationOptionTransitionCurlUp : UIViewAnimationOptionTransitionCurlDown)
completion:^(BOOL finished) {
if (finished) {
tabBarController.selectedIndex = controllerIndex;
}
}];
Solusi 2: Gulir (lebih kompleks)
Solusi yang lebih kompleks, tetapi memberi Anda lebih banyak kontrol atas animasi. Dalam contoh ini kita mendapatkan tampilan untuk meluncur dan mematikan. Dengan yang satu ini kita perlu mengatur sendiri pandangannya.
// Get the views.
UIView * fromView = tabBarController.selectedViewController.view;
UIView * toView = [[tabBarController.viewControllers objectAtIndex:controllerIndex] view];
// Get the size of the view area.
CGRect viewSize = fromView.frame;
BOOL scrollRight = controllerIndex > tabBarController.selectedIndex;
// Add the to view to the tab bar view.
[fromView.superview addSubview:toView];
// Position it off screen.
toView.frame = CGRectMake((scrollRight ? 320 : -320), viewSize.origin.y, 320, viewSize.size.height);
[UIView animateWithDuration:0.3
animations: ^{
// Animate the views on and off the screen. This will appear to slide.
fromView.frame =CGRectMake((scrollRight ? -320 : 320), viewSize.origin.y, 320, viewSize.size.height);
toView.frame =CGRectMake(0, viewSize.origin.y, 320, viewSize.size.height);
}
completion:^(BOOL finished) {
if (finished) {
// Remove the old view from the tabbar view.
[fromView removeFromSuperview];
tabBarController.selectedIndex = controllerIndex;
}
}];
Solusi ini di Swift:
extension TabViewController: UITabBarControllerDelegate {
public func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
let fromView: UIView = tabBarController.selectedViewController!.view
let toView : UIView = viewController.view
if fromView == toView {
return false
}
UIView.transitionFromView(fromView, toView: toView, duration: 0.3, options: UIViewAnimationOptions.TransitionCrossDissolve) { (finished:Bool) in
}
return true
}
}