首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在UINavigationController中禁用边缘滑动的过渡动画?

在UINavigationController中禁用边缘滑动的过渡动画可以通过自定义交互式转场来实现。下面是一种实现方法:

  1. 创建一个自定义的交互式转场类,继承自UIPercentDrivenInteractiveTransition,并遵循UIGestureRecognizerDelegate协议。
代码语言:txt
复制
import UIKit

class CustomInteractionTransition: UIPercentDrivenInteractiveTransition, UIGestureRecognizerDelegate {
    
    weak var navigationController: UINavigationController?
    var gestureRecognizer: UIScreenEdgePanGestureRecognizer?
    
    init(navigationController: UINavigationController, gestureRecognizer: UIScreenEdgePanGestureRecognizer) {
        super.init()
        
        self.navigationController = navigationController
        self.gestureRecognizer = gestureRecognizer
        self.gestureRecognizer?.addTarget(self, action: #selector(handleGesture(_:)))
        self.gestureRecognizer?.delegate = self
    }
    
    @objc private func handleGesture(_ gestureRecognizer: UIScreenEdgePanGestureRecognizer) {
        let viewTranslation = gestureRecognizer.translation(in: gestureRecognizer.view?.superview)
        let progress = viewTranslation.x / (gestureRecognizer.view?.bounds.width ?? 1)
        
        switch gestureRecognizer.state {
        case .began:
            navigationController?.popViewController(animated: true)
        case .changed:
            update(progress)
        case .cancelled, .ended:
            if progress > 0.5 {
                finish()
            } else {
                cancel()
            }
        default:
            break
        }
    }
    
    // MARK: - UIGestureRecognizerDelegate
    
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        guard let navigationController = navigationController,
              let topViewController = navigationController.topViewController else {
            return false
        }
        
        return topViewController.shouldDisableEdgeSwipe
    }
}
  1. 在需要禁用边缘滑动的UIViewController中,添加一个属性来标识是否禁用边缘滑动。
代码语言:txt
复制
import UIKit

class CustomViewController: UIViewController {
    
    var shouldDisableEdgeSwipe: Bool = false
    
    // ...
}
  1. 在需要禁用边缘滑动的UIViewController的viewDidLoad方法中,创建自定义的交互式转场,并将其关联到UINavigationController上。
代码语言:txt
复制
import UIKit

class CustomViewController: UIViewController {
    
    var shouldDisableEdgeSwipe: Bool = false
    var interactionTransition: CustomInteractionTransition?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Create a UIScreenEdgePanGestureRecognizer for the right edge
        let edgePanGestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))
        edgePanGestureRecognizer.edges = .right
        view.addGestureRecognizer(edgePanGestureRecognizer)
        
        // Create the interaction transition and associate it with the navigation controller
        if shouldDisableEdgeSwipe, let navigationController = navigationController {
            interactionTransition = CustomInteractionTransition(navigationController: navigationController, gestureRecognizer: edgePanGestureRecognizer)
        }
    }
    
    @objc private func handleEdgePan(_ gestureRecognizer: UIScreenEdgePanGestureRecognizer) {
        // Handle the gesture if needed
    }
    
    // ...
}

通过以上步骤,你可以在UINavigationController中禁用边缘滑动的过渡动画。注意,这里只是禁用了边缘滑动的过渡动画,而导航控制器其他的交互行为仍然有效。

对于推荐的腾讯云相关产品和产品介绍链接地址,由于题目要求不能提及具体的云计算品牌商,因此无法给出相应的推荐。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 自定义转场动画

[自定义转场动画集锦.gif] 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果、手势过渡动画、网易音乐启动屏转场动画、开关门动画、全屏侧滑返回效果 的代码可以到Github...模态化present和dismiss 自定义转场 1、创建一个遵循协议的动画过渡管理对象,并实现如下两个方法: //返回动画事件...transitionContext containerView]; //如果加入了手势交互转场,就需要根据手势交互动作是否完成/取消来做操作,完成标记YES,取消标记NO,必须标记,否则系统认为还处于动画过程中...//必要调用实现的系统方法 //手势过程中,通过updateInteractiveTransition设置转场过程动画进行的百分比,然后系统会根据百分比自动布局动画控件,不用我们控制了 [self...//返回处理push/pop动画过渡的对象 - (nullable id )navigationController:(UINavigationController

1.1K90

iOS 自定义转场动画

自定义转场动画集锦.gif 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果、手势过渡动画、网易音乐启动屏转场动画、开关门动画、全屏侧滑返回效果 的代码可以到Github...模态化present和dismiss 自定义转场 1、创建一个遵循协议的动画过渡管理对象,并实现如下两个方法: //返回动画事件...transitionContext containerView]; //如果加入了手势交互转场,就需要根据手势交互动作是否完成/取消来做操作,完成标记YES,取消标记NO,必须标记,否则系统认为还处于动画过程中...//必要调用实现的系统方法 //手势过程中,通过updateInteractiveTransition设置转场过程动画进行的百分比,然后系统会根据百分比自动布局动画控件,不用我们控制了 [self...//返回处理push/pop动画过渡的对象 - (nullable id )navigationController:(UINavigationController

1.3K50
  • iOS透明导航栏的平滑过渡(进阶版)引实现过程结

    既然有透明的导航栏也有不透明的导航栏,那一定会在界面切换之间存在一个过渡的过程,而这个过程,QQ做的特别好,在从透明导航栏界面返回到不透明导航栏界面时,导航栏的透明度是一个渐进的过渡效果,甚至会有一种毛玻璃的效果...这样每个 ViewController 都可以管理自己的导航栏透明度,在这个新增属性的setter方法中,我们调用前面在在 UINavigationController 的Category 中添加的设置导航栏透明度的方法...我们需要的随着手势滑动返回界面的进度,来实时变化导航栏的透明度,比如滑动到了界面一半的时候,导航栏透明度应该是 0.5。对于这个需求,首先想到的是,我们要监控这个滑动事件的滑动进度。...,我们可以在 UINavigationController 的 Delegate 中添加一个处理,监控松手后时自动完成返回还是取消返回操作,同时使用 UIView 动画(关于 UIView 动画可以看我的这篇文章...:传送门:iOS基础动画教程),在自动操作的那个时间内将透明度变为对应界面的导航栏透明度,让其变化的不那么跳跃: #pragma mark - UINavigationController Delegate

    3.1K40

    关于Adobe Photoshop调整选区介绍

    为此,请调整以下设置: 视图模式设置 视图模式:从“视图”弹出的菜单中,为选区选择以下几种视图模式: 洋葱皮 (O):将选区显示为动画样式的洋葱皮结构 闪烁虚线 (M):将选区边框显示为闪烁的虚线 叠加...显示边缘:显示调整区域. 显示原始选区:显示原始选区。 高品质预览:渲染更改的准确预览。此选项可能会影响性能。选择此选项后,在处理图像时,按住鼠标左键(向下滑动)可以查看更高分辨率的预览。...取消选择此选项后,即使向下滑动鼠标时,也会显示更低分辨率的预览。 透明度/不透明度:为“视图模式”设置透明度/不透明度。...在其他用例中,如果选区是涉及头发和肩膀的人物肖像,此选项则会十分有用。在这个边缘更加趋向一致的人物肖像中,可能需要为头发设置比肩膀更大的调整区域。...全局调整设置 平滑:减少选区边界中的不规则区域(“山峰和低谷”)以创建较平滑的轮廓。 羽化:模糊选区与周围的像素之间的过渡效果 对比度:增大时,沿选区边框的柔和边缘的过渡会变得不连贯。

    2.5K60

    iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言         在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem...) BOOL hidesBarsWhenKeyboardAppears; //屏幕滑动的时候隐藏导航栏,常用于tableView,上滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic..., readwrite, assign) BOOL hidesBarsOnSwipe; //滑动隐藏导航栏的手势 @property (nonatomic, readonly, strong) UIPanGestureRecognizer... NS_AVAILABLE_IOS(7_0); //下面两个方法可以对导航的转场动画进行设置 - (nullable id <UIViewControllerInteractiveTransitioning...; //push的时候隐藏底部栏,如push后隐藏tabbar @property(nonatomic) BOOL hidesBottomBarWhenPushed; //管理它的导航控制器 @property

    1.8K20

    UINavigationController 导航控制器概念属性方法

    *interactivePopGestureRecognizer; 9、获取滑动隐藏导航栏的手势 @property (nonatomic, readonly, strong) UIPanGestureRecognizer...*barHideOnSwipeGestureRecognizer; 10、屏幕滑动的时候是否隐藏导航栏,常用于tableView,上滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic...; (2)push的时候隐藏底部栏,如push后隐藏tabbar @property(nonatomic) BOOL hidesBottomBarWhenPushed; (3)获取管理它的导航控制器 @...UIViewController *)viewController animated:(BOOL)animated; 这个方法是为了iOS方法的命名统一,在导航中,其作用和push一样 - (void)...:(UINavigationController *)navigationController; (5)下面两个方法可以设置导航的转场动画 - (nullable id <UIViewControllerInteractiveTransitioning

    2.2K60

    如何使用 AngularJS 创建出色的动画效果?

    我们将从动画的基本概念开始,逐步介绍如何在 AngularJS 中使用动画,包括动态添加、移除元素的动画效果,以及在视图状态变化时的动画过渡效果。...在 AngularJS 中,动画是指在元素的显示、隐藏或状态变化时,通过改变属性值或样式来实现平滑的过渡效果。这些过渡效果可以是淡入淡出、滑动、旋转等各种形式。...CSS 动画是通过在元素的 CSS 样式中定义过渡效果,利用浏览器的硬件加速来提高性能。...首先,我们需要在 CSS 样式中定义相应的过渡效果,然后使用 ng-class 或 ng-show 等指令来控制类的添加/移除。AngularJS 会自动处理类的变化,从而实现平滑的动画过渡效果。...过多或复杂的动画效果可能会导致页面性能下降。为了优化性能,我们可以通过禁用动画、合并重复的动画操作、使用 requestAnimationFrame 等技术来提高动画的效率和流畅度。

    22230

    解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

    这些控件基本上都是对 UIkit(AppKit)的二次包装。Sheet执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet 时,与其关联的状态是在 Sheet 完成取消动画后才发生了改变。...),立即在屏幕上由左至右滑动,返回上一层视图在滑动返回到上一层视图后,应用会锁死。...如果我们认为问题出在这里,就需要使用编程式导航的方式来调整代码。为了不影响用户的使用习惯,我们禁用了 NavigationStack 自带的 Back 按钮。...通过自定义返回按钮以及扩展 UINavigationController 的方式,实现了在禁用 Back 按钮后仍支持手势返回,并先修改状态后再进行视图响应。...由于在返回上层视图时,状态尚未更新,因此在清理 AG 时(返回动画运行中),会破坏应用程序的 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

    760110

    iOS学习—— UINavigationController的返回按钮与侧滑返回手势的研究

    一 侧滑返回      侧滑返回是系统iOS7自带的一种方便用户进行返回操作而推出的一种新功能。在开发过程中,对侧滑返回进行控制非常简单,主要就是启动侧滑手势和禁用侧滑手势。...  1.2 侧滑使用注意 侧滑手势在使用中需要注意的一点就是在项目开发中,我们一般是采用的UITabBar + UINavigationController架构,对于每一个UITabBar的item模块...UINavigationController有效的,所以一旦你在某个界面禁用了侧滑,那么该UINavigationController控制下的所有viewController都会禁用侧滑,这显然是不合理的...——bind——  UINavigationController.view   滑动返回无法触发,说明UIScreenEdgePanGestureRecognizer并没有接收到手势事件,也就是说UIScreenEdgePanGestureRecognizer... 中添加按钮,然后添加按钮的点击功能即可。

    6.9K60

    你可能需要为你的 APP 适配 iOS 11

    本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bug 前言 前几天发现在做的APP在 iOS11 系统上动画有异常,在其他系统的设备上都是正常的...,本文作为一个总结,下文的第三部分会有对上述的动画异常的原因分析及解决方式。...;iOS 11 新增属性 UINavigationController和滚动交互 滚动的时候,以下交互操作都是由UINavigationController负责调动的: UIsearchController...的集成、大标题的控制更新和Rubber banding效果,因为这些都是由UINavigationController控制的。...margin指的是控件显示内容部分的边缘和控件边缘的距离。 可以用layoutMargins或者layoutMarginsGuide属性获得view的margin,margin是视图内部的一部分。

    1.7K60

    你可能需要为你的 APP 适配 iOS11

    前言 前几天发现在做的APP在iOS11系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData...,本文作为一个总结,下文的第三部分会有对上述的动画异常的原因分析及解决方式。...4、UINavigationController和滚动交互 滚动的时候,以下交互操作都是由UINavigationController负责调动的: 所以,如果你使用navigation bar,组装push...margin指的是控件显示内容部分的边缘和控件边缘的距离。 可以用layoutMargins或者layoutMarginsGuide属性获得view的margin,margin是视图内部的一部分。...值的变化,如果是有动画是观察这两个属性的变化进行的,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。

    2.5K00

    iOS 转场动画探究(一)

    过渡;转变;[分子生物] 转换;变调)       这个单词估计就是我们转场的基础了,留给英文可能不是那么6的你我他。...*** 官方支持以下几种方式的自定义转场:          1、我们最常见的在 UINavigationController 中 push 和 pop;          2、也是比较常见的在 UITabBarController...二:转场的几个关键点       转场最关键的地方就是几个转场协议,我们分开一个一个的说这几个转场的协议,在说这几个协议的过程中穿插一些简单的转场动画的案列,这些例子最后都会上传到git上去。...手势,它是一个屏幕边缘滑动手势,这个手势是继承自UIPanGestureRecognizer滑动手势的。...//UIScreenEdgePanGestureRecognizer:UIPanGestureRecognizer //添加屏幕边缘滑动手势 UIScreenEdgePanGestureRecognizer

    2.7K50

    解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

    Sheet 执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet 时,与其关联的状态是在 Sheet 完成取消动画后才发生了改变。...(动画结束时),立即在屏幕上由左至右滑动,返回上一层视图 在滑动返回到上一层视图后,应用会锁死。...如果我们认为问题出在这里,就需要使用编程式导航的方式来调整代码。 为了不影响用户的使用习惯,我们禁用了 NavigationStack 自带的 Back 按钮。...通过自定义返回按钮以及扩展 UINavigationController 的方式,实现了在禁用 Back 按钮后仍支持手势返回,并先修改状态后再进行视图响应。...由于在返回上层视图时,状态尚未更新,因此在清理 AG 时(返回动画运行中),会破坏应用程序的 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

    37020

    VCTransitionsLibrary –自定义iOS交互式转场动画的库

    使用 在自定义转场动画时,有两类关键的类: 动画控制器 –  这个类是用来实现自定义动画的.但你声明想要使用自定义动画时,你应该提供一个动画控制器.这个类会实现需要的动画,完成时会通知框架....交互控制器 – 这个类是用来管理交互的-那些通常由某个手势空控制的交互,允许用户通过滑动,轻扫或执行其他操作来实现两个视图控制器的导航.必须指出的是,交互控制器允许导航取消,例如,一个用户可以在正在导航至某一页面时...使用动画控制器 AnimationControllers 文件夹中提供了许多可以整合进你的工程中的动画控制器: 自定义模态控制器显示/隐藏的动画 UIViewControllerTransitioningDelegate...自定义顶部导航的转场动画 UINavigationController 有一个 id delegate 属性.只需要让它的代理通过 navigationController...: // 实例变量,通常在你的初始化方法中初始化它们.

    1.6K60

    你可能需要为你的APP适配iOS11

    前言 前几天发现在做的APP在iOS11系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData...,本文作为一个总结,下文的第三部分会有对上述的动画异常的原因分析及解决方式。...UINavigationController和滚动交互 滚动的时候,以下交互操作都是由UINavigationController负责调动的: 所以,如果你使用navigation bar,组装push...margin指的是控件显示内容部分的边缘和控件边缘的距离。 可以用layoutMargins或者layoutMarginsGuide属性获得view的margin,margin是视图内部的一部分。...值的变化,如果是有动画是观察这两个属性的变化进行的,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。

    82820

    iOS 自定义 ViewController 过渡动画

    这里只以这个动画的实现为主线,更系统的介绍请移步上面的相关链接。 视图控制器过渡,就是指图片里那种 ViewController 的过渡效果。(好废话。。。)...在上面链接的视频里说到,一共有下面这四个地方可以用自定义过渡: Presentations and dismissals UITabBarController UINavigationController...,例子就是在 NavigationController 的详细页面中从屏幕左侧滑入以返回时的那个动画。...可以用手势控制过渡动画的进度,还可以中途取消手势。这个也不会提到。。。...有两个方法需要实现 // 这个方法负责做真正的动画,输入参数是过渡的上下文,从哪个VC过渡到哪个VC这些东西都可以从它得到。

    1.4K31

    Google IO 2019 Android 应用源代码现已发布

    为了支持手势导航支持,应用开发者需要做到以下两点: 将应用内容扩展到屏幕边缘 处理存在冲突的应用手势 Google I/O 2019 应用是首批完全支持手势导航的应用之一。...日程界面优化 在 2018 年,大会日程的 UI 设计采用了标签界面,一个标签代表一个会议日,用户可通过竖屏滑动来查看不同的日程安排。...移除了向上/返回导航操作的样板代码 使用 Safe Args Gradle 插件在各个 Fragment 之间传递静态类型的参数 请阅读《导航组件入门指南》,学习如何在应用中添加导航组件,或查看 Google...I/O 2019 应用库中的相关代码 (添加 Gradle 依赖项和插件, 迁移 MainActivity, 更新会话详情和次级导航结构, 禁用导航抽屉),了解导航组件在真实应用中的具体用法。...在导航编辑器内查看所有过渡动画 使用 Room 实现全文搜索 我们为今年的大会应用添加了一个搜索功能,方便用户快速查找有关演讲、讲师和 codelab 的信息。

    1.7K10
    领券