gpt4 book ai didi

ios - 触摸方法未在放置在 UIScrollView 中的 UIView 上调用

转载 作者:可可西里 更新时间:2023-11-01 05:06:43 25 4
gpt4 key购买 nike

我有一个自定义 ScrollView ,它是 UIScrollView 的子类。我在我的 viewcontroller nib 文件中添加了一个 ScrollView ,并将其类更改为 CustomScrollView。现在,这个自定义 ScrollView (由 xib 制作)被添加为 self.view 的 subview 。

在这个 ScrollView 中,我有 3 个文本字段和 1 个从 xib 添加的 UIImageView(名为 signImageView)。单击 UIImageView(添加了一个 TapGestureRecogniser)时,自定义 ScrollView 上会添加一个名为 signView 的 UIView。我想让用户在这个 View 上签名,所以我创建了一个类 Signature.m 和 .h,子类 UIView 并实现了 touches 方法(touchesBegan、touchesMoved 和 touchesEnded)并将 signView 初始化为如下:

signView = [[Signature alloc]initWithFrame:signImageView.frame];
[customScrollView addSubview:signView];

但是当我开始在 signView 上签名时, View 会滚动,因此不会调用 touches 方法。

我尝试在 self.view 上添加 signView 而不是自定义 ScrollView ,但在这种情况下,当我开始滚动时, View 仍然粘在固定位置。 (在这种情况下它的框架保持固定)

最佳答案

尝试将 scrollViewcanCancelContentTouches 设置为 NO 并将 delaysContentTouches 设置为 YES .

编辑:

我看到这里回答了类似的问题 Drag & sweep with Cocoa on iPhone (答案完全一样)。

如果用户点按并按住 signView(大约 0.3-0.5 秒),则 View 的 touchesBegan: 方法将被触发,所有事件从那一刻开始到 signView 直到 touchesEnded: 被调用。

如果用户快速滑动 signView,则 UIScrollView 接管。

由于您已经使用 touchesBegan: 方法实现了 UIView 的子类化,也许您可​​以以某种方式向用户表明您的应用已准备好供他签名('green光'等效)。

您还可以使用 touchesEnded: 关闭此绿灯

如果将 signImageView 添加为 signViewsubView 可能会更好(而不是 customScrollView)并在触发 touchesBegan: 时隐藏它)。您可以在现有代码中添加 signImageView 的同一位置将 signView 添加到 customScrollview

这样你就可以实现那个地方实际上只有一个 subView(为了更好的触摸传递效率。你可以通过 un- 实现 green light 效果在 touchesBegan:/touchesEnded:

中隐藏 signImageView

如果此应用程序行为(0.3-0.5 秒延迟) Not Acceptable ,那么您还需要子类化 UIScrollView。 Vignesh 覆盖 UIScrollViewtouchesShouldBegin: 的方法可能会派上用场。在那里,您可能会检测到触摸是否在 signView 中发生,并立即将其传递给该 View 。

关于ios - 触摸方法未在放置在 UIScrollView 中的 UIView 上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9567599/

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