gpt4 book ai didi

iOS:当 SignaturePadView 在 UIScrollView 中时,如何防止滚动?

转载 作者:行者123 更新时间:2023-11-29 12:05:49 24 4
gpt4 key购买 nike

在我的移动程序 UI 中,我有一个位于 UIScrollView 中的 SignaturePadView(继承自 UIView 的第 3 方组件)。每当我尝试调试程序时,只要我将手指放在 SignaturePadView 中并开始签名,它所在的 ScrollView 就会捕获输入并滚动,不允许我创建签名。当用户在 SignaturePadView 内部触摸时,是否可以禁用 UIScrollView 的滚动功能。

我尝试过的两件事没有成功:

  1. SignaturePadView 上将 ExclusiveTouch 设置为 true。对于这个,ScrollView 似乎在检查 ExclusiveTouch 之前捕获输入。
  2. 子类化 UIScrollView 并覆盖 TouchesShouldBegin 以关闭滚动。这允许我检查 inContentView 参数以查看它是否属于 SignaturePadView 类型。这有两个问题:首先,SignaturePadView 中有 subview 返回到 inContentView 而不是 SignaturePadView。其次,TouchesEnd 并不总是触发,允许我在用户完成签名后重新打开滚动。

此时此刻,我正在寻求有关此问题的任何帮助。我是 Xamarin 和 iOS 开发的新手,最后一件事让我无法完成我的项目。

最佳答案

我在浏览了一些 Objective-C 代码后发现了它。我必须子类化 ScrollView 并覆盖 HitTest。对于将来遇到此问题的任何人,这是我使用的代码。

自定义 ScrollView :

public class CustomScrollView : UIScrollView
{
public IList<CGRect> DeadAreas { get; } = new List<CGRect>();

public override UIView HitTest(CGPoint point, UIEvent uievent)
{
ScrollEnabled = DeadAreas.Any(x => x.Contains(point)) ? false : true;

return base.HitTest(point, uievent);
}
}

在我的 ViewController 中:

_formView.DeadAreas.Add(signaturePadViewer.Frame);

像魅力一样工作。原来我原来的错误是重写了 Touch 方法而不是 HitTest 方法。

关于iOS:当 SignaturePadView 在 UIScrollView 中时,如何防止滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35066206/

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