gpt4 book ai didi

ios4 - iPhone : How to switch tabs with an animation?

转载 作者:行者123 更新时间:2023-12-03 04:43:36 25 4
gpt4 key购买 nike

我使用 UITabBarController.selectedIndex 在选项卡栏驱动的应用程序中以编程方式切换选项卡。我试图解决的问题是如何为 View 之间的过渡设置动画。 IE。从当前选项卡的 View 到所选选项卡的 View 。

第一个想法是使用UITabBarControllerDelegate,但似乎在以编程方式切换选项卡时不会调用它。我现在正在考虑将 UITabBarDelegate.didSelectItem: 作为设置过渡动画的可能 Hook 。

有人设法制作过渡动画吗? 如果是,怎么做?

最佳答案

更新 04/2016:Justed 希望更新此内容以感谢大家的投票。另请注意,这最初是在……ARC之前、约束之前、……很多东西之前写的!因此,在决定是否使用这些技术时请考虑这一点。可能有更现代的方法。哦,如果你找到了。请添加回复,以便每个人都可以看到。谢谢。

一段时间后...

经过大量研究,我想出了两个可行的解决方案。这两个方法都有效,并且在选项卡之间实现了动画。

解决方案 1:从 View 转换(简单)

这是最简单的,并且使用预定义的 UIView 转换方法。使用此解决方案,我们不需要管理 View ,因为该方法为我们完成了工作。

// 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:滚动(更复杂)

更复杂的解决方案,但可以让您更好地控制动画。在此示例中,我们让 View 可以滑动和关闭。有了这个,我们需要自己管理 View 。

// 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;
}
}];

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
}
}

关于ios4 - iPhone : How to switch tabs with an animation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5161730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com