Ios 通过触摸开始/触摸移动的触摸输入(笔/手指)具有较大的初始间隙

Ios 通过触摸开始/触摸移动的触摸输入(笔/手指)具有较大的初始间隙,ios,swift,xamarin,Ios,Swift,Xamarin,我正在为iOS开发一个应用程序。所有东西的最新版本 我添加了一些触摸输入——基本上是绘制一些形状和突出显示事物的能力。我有一个UIScrollView,其中包含一个UIView,其他对象可以在其上绘制或放置。UIView有一个子视图-一个自定义UIView,它是覆盖整个UIView的绘图画布 我正在捕捉画布中的触摸开始/移动/取消/结束例程。绘图、记录点、重画、根据压力、颜色改变线厚度等工作正常 奇怪的是,我总是收到开始的消息,然后立即一个巨大的跳跃移动的消息。然后事情似乎稳定下来,每8-10毫

我正在为iOS开发一个应用程序。所有东西的最新版本

我添加了一些触摸输入——基本上是绘制一些形状和突出显示事物的能力。我有一个UIScrollView,其中包含一个UIView,其他对象可以在其上绘制或放置。UIView有一个子视图-一个自定义UIView,它是覆盖整个UIView的绘图画布

我正在捕捉画布中的触摸开始/移动/取消/结束例程。绘图、记录点、重画、根据压力、颜色改变线厚度等工作正常

奇怪的是,我总是收到开始的消息,然后立即一个巨大的跳跃移动的消息。然后事情似乎稳定下来,每8-10毫秒接收一次点,以平滑跟踪

以下是一个例子: 第一个-touchesStart调用,我在其中记录第一个点

2020-11-09 10:16:51.094 PenApp[1499:449121] TouchBegan: Point(656.50, 380.00)
2020-11-09 10:16:51.094 PenApp[1499:449121] Added point: Point(656.50, 380.00), Vector(0.00, 0.00), width(1.00), timestamp(70488.92), speed(0.00), force(1.47)
现在,在触摸移动过程中添加积分。请注意,第一个点有一个巨大的跳跃(参见“向量”,它是与前一个点的差异)。这发生在触摸开始的毫秒内(51.094)。然后事情稳定下来,顺利跟踪

2020-11-09 10:16:51.094 PenApp[1499:449121] Added point: Point(809.50, 518.50), Vector(153.00, 138.50), width(2.94), timestamp(70489.09), speed(1206.88), force(1.47)
2020-11-09 10:16:51.096 PenApp[1499:449121] Added point: Point(810.50, 525.00), Vector(1.00, 6.50), width(2.87), timestamp(70489.10), speed(1644.12), force(1.43)
2020-11-09 10:16:51.097 PenApp[1499:449121] Added point: Point(811.00, 531.00), Vector(0.50, 6.00), width(2.86), timestamp(70489.10), speed(1505.20), force(1.43)
2020-11-09 10:16:51.105 PenApp[1499:449121] Added point: Point(811.00, 536.00), Vector(0.00, 5.00), width(2.85), timestamp(70489.11), speed(1250.00), force(1.42)
2020-11-09 10:16:51.113 PenApp[1499:449121] Added point: Point(807.50, 551.50), Vector(-3.50, 15.50), width(2.84), timestamp(70489.12), speed(1222.33), force(1.42)
2020-11-09 10:16:51.122 PenApp[1499:449121] Added point: Point(805.50, 556.50), Vector(-2.00, 5.00), width(2.86), timestamp(70489.12), speed(1346.29), force(1.43)
我看到其他人对第一点差距发表评论,并建议跳过第一点。我不能简单地忽略第一点——那就是我用笔/手指触摸屏幕开始曲线的地方。跳过它会导致在绘图开始之前出现一个很大的间隙(我尝试过)

其影响是,我的笔在整个过程中实际上都在跟踪一条曲线,但我在数据中得到了巨大的初始间隙,因此,尽管我实际上在使用Beziers绘制曲线(厚度不同),但由于缺少中间点,我在屏幕上实际绘制的直线基本上需要笔直。下面是一个示例-从底部开始绘制:

我没有其他线程在运行。这是非常一致的-它发生在每一张图纸上。我看不到其他事件。我在外部滚动视图上设置了一个双指平移手势识别器,这样我就可以四处移动,并且我可以忽略触摸功能中的多点触摸。但是,没有引发多点触控事件

有没有人看到这一点,并可能有一些指针? 谢谢 保罗

附录:我正在尝试使用UIGestureRecognizer的一个自定义子类,它的touchesBegind/TouchesMoved方法似乎被正确调用——在开始时没有任何大的跳跃

附录^2:使用UIGestureRecognitor工作得很好,所以我将在这里复制我的代码。我不会添加答案,因为我不认为这回答了实际问题(为什么触摸*有很大的间隙)-相反,这更像是一种解决方法。使用笔势跟踪画图感觉不太好-我的理解是,它们更适合高级操作(平移、对象选择、移动等)

在我的DrawingView中,我将Touchs*重命名为Curve*(例如TouchesBegind->CurveBegan)。我的绘图现在非常平滑-下面是一个示例:


您可以从评论中的GitHub链接中看到:

这个问题可能是iOS固有的

因此,上述附录2中概述的源代码和解决方案 将彻底解决这个问题


因此,我认为这一个已经关闭。

我在iOS应用程序中遇到了同样的问题,因为我在其中捕获触摸事件的视图嵌入到了滚动视图中

可以通过设置ScrollView而不延迟触摸事件来解决此问题:

scrollView.delaysContentTouches = false

不知道如何在Xamarin中做到这一点。

嗨,如果在使用
触摸时存在这种现象,你也可以在Github中提交它[此处(])以寻求更多帮助。@JuniorJiang MSFT-done。好的,你可以在这里共享链接,然后其他人也可以在那里跟进。很好。好的,如果是这样的话,你可以把这个标记为答案。其他人会知道为什么在iOS设备上显示。
scrollView.delaysContentTouches = false