当前位置: 首页 > news >正文

iOS18 取消/适配TabbarController缩放动画

升级iOS18后,系统的tabbar会加入缩放动画,下面我们来探讨一下如何去除缩放

1、在选中item的方法中添加去除动画

使用 performWithoutAnimation: 来包裹 self.selectedIndex 的设置可以有效地禁用 tabBar 切换时的动画效果。

[UIView performWithoutAnimation:^{self.selectedIndex = item.tag - ButtonTag;
}];

2、使用代理方法设置动画时间为0

1.tabBarController:animationControllerForTransitionFromViewController:toViewController:

这个方法是 UITabBarControllerDelegate 协议中的一个可选方法。当 UITabBarController 切换标签视图时,可以使用此方法来提供自定义的动画控制器。它的返回值是一个符合 UIViewControllerAnimatedTransitioning 协议的对象,该对象控制视图转换的动画。

代码中,返回的是 self,意味着该类(即 TabBarController)将自己用作动画控制器。

2. animateTransition:

这个方法是 UIViewControllerAnimatedTransitioning 协议的一部分,用于定义具体的转换动画。当 UITabBarController 切换视图时,会调用这个方法来执行动画。在这里:

UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
[transitionContext.containerView addSubview:toView];
[transitionContext completeTransition:YES];

• toView 是目标视图控制器的视图。

• addSubview: 将目标视图添加到 transitionContext.containerView 中。

• [transitionContext completeTransition:YES]; 表示转换已经完成。

因为没有设置任何动画,转换过程是即时的,看起来就像没有动画一样。

3. transitionDuration:

这个方法返回动画的持续时间。在你的代码中返回了 0,这表示转换没有延迟,立即完成。这也是为什么标签切换时没有动画效果的原因。

下面是具体实现方法: 

@interface TabBarController () <UIViewControllerAnimatedTransitioning, UITabBarControllerDelegate>@end@implementation TabBarController- (void)viewDidLoad {[super viewDidLoad];//设置代理self.delegate = self;
}#pragma mark - UITabBarControllerDelegate
- (nullable id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarControlleranimationControllerForTransitionFromViewController:(UIViewController *)fromVCtoViewController:(UIViewController *)toVC {return self;
}#pragma mark - UIViewControllerAnimatedTransitioning
- (void)animateTransition:(nonnull id<UIViewControllerContextTransitioning>)transitionContext {UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];[transitionContext.containerView addSubview:toView];[transitionContext completeTransition:YES];
}//返回0s禁用动画
- (NSTimeInterval)transitionDuration:(nullable id<UIViewControllerContextTransitioning>)transitionContext {return 0;
}
@end

http://www.mrgr.cn/news/61997.html

相关文章:

  • vue添加省市区
  • linux 高级 I/O
  • 完全透彻了解一个asp.net core MVC项目模板2
  • 基于uniapp微信小程序的校园二手书交易系统
  • spyglass关于cdc检测的一处bug
  • JVM 调优深度剖析:优化 Java 应用的全方位攻略(一)
  • Vue CLI: 安装、项目创建及基本概念指南,vue生命周期
  • C++:输入和输出
  • 《Linux系统编程篇》exec族函数——基础篇
  • MATLAB——入门知识
  • Vue3 学习笔记(十三)Vue组件详解
  • Windows高级技巧:轻松实现多进程窗口的连接与管理
  • 轻松实现金蝶与旺店通数据无缝对接的完整解决方案
  • Linux文件系统_inode
  • 兽音译器的编码原理
  • 真香!Python十大文件操作整理,收藏起来以后有用!!
  • 为什么不建议使用黑帽SEO手法?
  • 阿里云VPC机器如何访问公网
  • 【总目录】
  • 浏览器指纹:了解这个神秘的技术
  • node学习记录-process
  • 【flink】之kafka到kafka
  • Flask
  • Python 中 jieba 模块详解
  • Frida使用
  • ✨云桥计划✨