当前位置: 首页 > 知识库问答 >
问题:

不同界面方向的UIViewController之间手势驱动的自定义转换

艾凌龙
2023-03-14

如何在两个UIViewController之间实现自定义手势驱动的转换,其中初始视图控制器支持多个界面方向,但最终视图控制器仅限于。肖像

我希望实现一种手势驱动的过渡,类似于在库存iPhone摄像头应用程序中找到的过渡。在这里,您可以通过将照片拖向屏幕底部离开图库,一旦拖到足够远的地方,就可以通过抬起手指来解除图库。

我在网上找到了许多解释如何实现这种行为的来源,我认为最突出的解决方案如下:

>

  • 自定义动画的子类UIViewControllerAnimatedTransitioning,并使用UIPercentDrivenInteractiveTransition和UIPangestureRecognitor对其进行控制。

    使用. modalPresentationStyle=. overFullScreen向子UIViewController(即库)呈现. modalPresentationStyle=. overFullScreen,然后再次使用UIPanGesture认可器根据需要应用位置和大小更改。然后可以在平移手势结束时触发解雇动画。

    我的问题是,当子视图控制器和父视图控制器的方向不同时,这两种方法都会失败。这同样可以通过stock Camera应用程序得到最好的解释:在相机视图(父视图)中,将手机从纵向旋转到横向不会重新排列整个UI,而只会旋转一些按钮。我需要类似的行为,并通过重写supportedInterfaceOrientations来返回代码来实现这一点。纵向。但是,库视图确实会根据方向重新排列其UI,因此子视图不限制支持的界面方向。

    因此,在stock应用程序中,我可以很好地将手机旋转到横向,并且仍然可以使用手势来关闭gallery,在我的实现中,这会以以下方式失败:

    >

  • 对于第一种方法,UIPanGestureRecognizer几乎立即将其状态更改为ended,取消动画并使UI处于某种未定义的状态,两个视图控制器都可见。

    在第二种方法中,父视图控制器保持对设备方向的控制,不允许子视图控制器将其UI重新排列为横向模式。

    想知道现有框架是否有类似的问题,我偶然发现了英雄库,如果在应用程序的部署信息中激活横向方向,并且第一个视图控制器通过将此块添加到类FirstViewController来锁定到竖屏中,那么我的案例1可以从示例中完美复制。

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .portrait }
    
  • 共有1个答案

    黄永怡
    2023-03-14

    您不应该阻止“相机”屏幕旋转。而是阻止相机的视图旋转。检查以下答案:https://stackoverflow.com/a/38874886/4637398

    这是我的相机布局粗略副本的演示(可能不是视图旋转阻塞的最酷实现):https://www.dropbox.com/s/wqheb9i6mk6bql3/Camera-like.zip?dl=0

     类似资料:
    • 本文向大家介绍iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势),包括了iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势)的使用技巧和注意事项,需要的朋友参考一下 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性。 1、UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的

    • 本文向大家介绍Android实现自定义手势和识别手势的功能,包括了Android实现自定义手势和识别手势的功能的使用技巧和注意事项,需要的朋友参考一下 1. 先完成自定义手势的Activity 1.1 因为需要存储手势文件所以需要声明权限: 1.2 简单写一个布局文件,其中用到了GestureOverlayView,相当于一个绘制组件。其中有一个重要属性gestureStrokeType,值为si

    • 本文向大家介绍Java对世界不同时区timezone之间时间转换的处理方法,包括了Java对世界不同时区timezone之间时间转换的处理方法的使用技巧和注意事项,需要的朋友参考一下 最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间。 一、关于时区的一些概念 1.1 什么

    • 本文向大家介绍Android自定义GestureDetector实现手势ImageView,包括了Android自定义GestureDetector实现手势ImageView的使用技巧和注意事项,需要的朋友参考一下 不说废话了,进入我们今天的主题吧。 先贴上前面内容的地址: Android手势ImageView三部曲(一) Android手势ImageView三部曲(二) Android手势Ima

    • 主要内容:将二进制、八进制、十六进制转换为十进制,将十进制转换为二进制、八进制、十六进制,二进制和八进制、十六进制的转换,总结对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果你觉得吃力,可以暂时跳过,基本不会影响后续章节的学习,等用到的时候再来阅读。 上节我们对二进制、八进制和十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言。 将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位

    • 本文向大家介绍Android自定义View实现随手势滑动控件,包括了Android自定义View实现随手势滑动控件的使用技巧和注意事项,需要的朋友参考一下 本文控件为大家分享了Android随手势滑动控件的具体代码,供大家参考,具体内容如下 1.新建自定义控件类:MyView 上面代码就是一个自定义按钮类,重写onTouchEvent()方法来监听用户滑动,既然说到滑动肯定会存在偏移量的说法。 t