अपडेट 04/2016: जस्टेड सभी वोटों के लिए सभी को धन्यवाद कहने के लिए इसे अपडेट करना चाहता था। कृपया यह भी ध्यान दें कि यह मूल रूप से वापस लिखा गया था ... एआरसी से पहले, बाधाओं से पहले, ... बहुत सारा सामान! तो कृपया इन तकनीकों का उपयोग करने का निर्णय लेते समय इसे ध्यान में रखें। अधिक आधुनिक दृष्टिकोण हो सकते हैं। ओह, और यदि आप एक पाते हैं। कृपया प्रतिक्रिया जोड़ें ताकि सभी लोग देख सकें। धन्यवाद।
कुछ समय बाद ...
बहुत शोध के बाद मैं दो समाधान के साथ आया। इन दोनों ने टैब के बीच एनीमेशन पर काम किया और किया।
समाधान 1: दृश्य से संक्रमण (सरल)
यह सबसे आसान है और एक पूर्वनिर्धारित UIView संक्रमण विधि का उपयोग करता है। इस समाधान के साथ हमें विचारों को प्रबंधित करने की आवश्यकता नहीं है क्योंकि विधि हमारे लिए काम करती है।
// 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;
}
}];
समाधान 2: स्क्रॉल (अधिक जटिल)
एक अधिक जटिल समाधान, लेकिन आपको एनीमेशन का अधिक नियंत्रण प्रदान करता है। इस उदाहरण में हमें स्लाइड को बंद और बंद करने के विचार मिलते हैं। इसके साथ ही हमें अपने विचारों का प्रबंधन करने की आवश्यकता है।
// 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;
}
}];
स्विफ्ट में यह समाधान:
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
}
}