当方向设置为水平时,UIPageViewController 响应垂直平移

2024-04-20

我在这上面花了几个小时。我已经初始化了UIPageViewController with UIPageViewControllerNavigationOrientationHorizontal,但由于某种原因viewControllerBeforeViewController当用户垂直平移时调用。

此外,当发生这种情况时,不会进行翻页,并且didFinishAnimating:didFinishAnimating:previousViewControllers:transitionCompleted根本没有被调用。这意味着页面视图控制器知道这是垂直移动。

这是初始化代码 -

- (void)initPageViewController
{
    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                              navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal 
                                                                            options:nil];
    self.pageViewController.delegate = self;
    self.pageViewController.dataSource = self;

    [self addChildViewController:self.pageViewController];
    [self.view addSubview:self.pageViewController.view];

    // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
    self.pageViewController.view.frame = self.view.bounds;

    [self.pageViewController didMoveToParentViewController:self];

    // Leave only pan recognizers enabled, so buttons positioned inside a page would work.
    for (UIGestureRecognizer *gr in self.pageViewController.gestureRecognizers)
    {
        if ([gr class] != [UIPanGestureRecognizer class])
            gr.enabled = NO;
    }
}

有任何想法吗?


我最初偶然发现你面临同样的问题 - 但我似乎已经针对我的情况修复了它。

基本上,我要做的就是为附加到的所有手势识别器设置一个委托。UIPageViewController。所以,在创建之后不久UIPageViewController,我做了:

for (UIGestureRecognizer *gr in self.book.gestureRecognizers)
    gr.delegate = self.book;

where book是我的习惯UIPageViewController(我基本上将自己设置为代表)。最后,将此方法添加到您的UIPageViewController限制任何垂直平移(或使用注释掉的行来限制水平平移)。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
    {
        UIPanGestureRecognizer *panGestureRecognizer = (UIPanGestureRecognizer *)gestureRecognizer;
        CGPoint translation = [panGestureRecognizer translationInView:self.view];

        return fabs(translation.x) > fabs(translation.y);
//      return fabs(translation.y) > fabs(translation.x);
    }
    else
        return YES;
}

我被暗示了这一点,感谢这个答案 https://stackoverflow.com/a/7118827/1089059- 只要确保过滤掉UIPanGestureRecognizers only.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当方向设置为水平时,UIPageViewController 响应垂直平移 的相关文章

随机推荐

  • Java 中 & 和 && 有什么区别?

    我一直以为 Java中的运算符用于验证其两个布尔操作数是否为true 以及 运算符用于对两个整数类型进行按位运算 最近我才知道 运算符也可用于验证其布尔操作数是否为true 唯一的区别是即使 LHS 操作数为 false 它也会检查 RHS
  • 如何避免 Entity Framework Core 中的循环导航属性?

    我有一个这样的表架构 CREATE TABLE Categories Id INT IDENTITY 1 1 Name varchar 100 CONSTRAINT PK Category Id PRIMARY KEY Id CREATE
  • iOS 自定义 UITextField 与出口初始化

    I need UITextField几乎没有定制 我创建了新的自定义类 CustomTextField 在IB中我创建了outlet对于我的每一个习惯UITextField 我运行代码 但自定义不起作用 为了进行检查 我在初始化过程中设置了
  • 应该如何构建plot_surface的数组?

    我试图了解如何构建用于plot surface 在Axes3d中 的数组 我尝试构建一个简单的表面来操作这些数组的数据 In 106 x Out 106 array 0 0 0 1 0 0 In 107 y Out 107 array 0
  • VBA 自动化 - 预填充组合盒

    我正在尝试通过 VBA 将数据从 Excel 预填充到本地 Intranet 网站 我已经能够将大部分数据预填充到网站 但我正在努力处理这个组合日期框 请参阅 HTML 代码 div class form group row div
  • 在 switch/case 语句中使用列表中的值作为 case

    我有一个 ArrayList 其中包含以下字符串 name age gender salary 有没有办法可以将 ArrayList 中的值用作 case 表达式 显而易见的答案是否定的 因为 case 表达式必须是常量表达式 但是 我想知
  • 谷歌标签管理器中的自定义事件触发器

    每次我创建自定义触发事件时 它都不会触发 谁能请教一下可能是什么原因 我创建了 gacustomevent 自定义触发器并将其命名为 gaevent 但该事件没有被触发 我想使用数据层中的事件来捕获值 有关如何解决问题的任何建议 从你的问题
  • 如何使着色器淡入某种颜色?

    这是我当前使用的着色器 它通过缓慢降低不透明度来淡化对象 我想褪成紫色 如何才能做到这一点 着色器 frag uniform sampler2D texture uniform float opacity void main vec4 pi
  • 使用 MultiSelect 具有自定义弹出编辑器的 Kendo Grid - 无法获取模型中的选定项目

    所以标题几乎说明了一切 我正在尝试将新的 MultiSelect 小部件合并到网格的自定义弹出编辑器模板中 我正在使用数据属性初始化方法并从远程数据源读取下拉选项 这一切都工作正常 但我无法将所选项目的值放入模型中 当我保存行时 数据数组将
  • 在 Access 中设置子窗体的记录源

    Dim newRS newRS SELECT DISTINCT Grp ID Group Name Group NPI FROM GROUP Forms loclistingfrm LocationListSubFrm RecordSour
  • ESAPI getValidInput 方法的使用

    我无法使用下面的 of 方法ESAPI class java lang String getValidInput java lang String context java lang String input java lang Strin
  • 使用 Javascript 以编程方式制作 Wave

    这是我目前拥有的http jsfiddle net 6GEfr http jsfiddle net 6GEfr 这可行 但我希望它像波浪一样 它应该看起来像真正的波浪 而不是 V 形 你如何逐渐做到这一点 var height 0 setI
  • Eclipse 在启动配置中使用错误的 Maven 依赖项

    我正在开发一个使用 Maven 进行依赖 构建 任何其他操作 项目生命周期管理或其他 的项目 并且我正在使用 Eclipse 进行开发和测试 该项目使用 Vert x 最新 我尝试使用 Hazelcast 进行一些集群管理 但我遇到了 Ha
  • 在什么类型的情况下汇编速度不够快,因此您需要直接的硬件/布尔逻辑解决方案?

    我已经开始通读装配艺术 https nostarch com assembly2 htm 其中有一个关于布尔逻辑的部分 其中指出 当然 使用 Pascal C 甚至汇编语言等语言指定编程问题的解决方案比使用布尔方程指定解决方案要容易得多 因
  • 具有动态嵌套组件的角度循环依赖性

    我在互联网上寻找解决方案 但无济于事 不同情况等 所以请原谅下面的代码转储 我遇到的问题与循环依赖有关 代码转储是为了提供上下文 旁注 我对 Angular 和 Typescript 相当陌生 这个概念 当然 我正在尝试构建一组嵌套组件 它
  • 克隆/拉取 git 存储库时出现致命读取错误

    我在我的系统上使用 Git for Windows git 版本 1 7 4 msysgit 0 并且大多数时候它都工作得很好 但是今天在大学 每当我尝试使用 Git 时 我都会遇到问题git clone or git pull or ge
  • 在新日期上调用 getTime 时,未定义不是函数

    当尝试运行它时 我得到 未定义不是一个函数 我缺少什么 function bench func var start new Date getTime for var i 0 i lt 10000 i func console log fun
  • 当多个Spring Singleton实例同时访问时

    如果您在 Spring 配置中的单例范围内定义服务 那么如果多个用户尝试同时访问它 即作为依赖项注入到您的控制器中 会发生什么情况 它应该引起任何冲突吗 或者 IoC 容器将保留后面的调用直到第一个调用完成 如果是这样 它会降低大型应用程序
  • 绑定到枚举的关联值

    是否有一个标准的方法来绑定 比如说 TextField到枚举的关联值 所以 鉴于此 enum Choice case one String case two String 我可以以某种方式将它用作视图中的绑定吗 State var choi
  • 当方向设置为水平时,UIPageViewController 响应垂直平移

    我在这上面花了几个小时 我已经初始化了UIPageViewController with UIPageViewControllerNavigationOrientationHorizontal 但由于某种原因viewControllerBe