iOS 上的同时平移手势识别

PanGestureRecognizer 附加到滚动视图内的视图时,PanGestureRecognizer 会捕获所有平移手势,并且不会传递到滚动视图。 因此,滚动视图将不再滚动。

此 iOS 平台特定功能可使滚动视图中的 PanGestureRecognizer 能够捕获平移手势并与滚动视图共享。 其使用方式为,在 XAML 中将 Application.PanGestureRecognizerShouldRecognizeSimultaneously 附加属性设置为 true

<Application ...
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
             ios:Application.PanGestureRecognizerShouldRecognizeSimultaneously="true">
    ...
</Application>

或者,可以使用 Fluent API 从 C# 使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
...

Xamarin.Forms.Application.Current.On<iOS>().SetPanGestureRecognizerShouldRecognizeSimultaneously(true);

Application.On<iOS> 方法指定此平台特定功能将仅在 iOS 上运行。 Xamarin.Forms.PlatformConfiguration.iOSSpecific 命名空间中的 Application.SetPanGestureRecognizerShouldRecognizeSimultaneously 方法用于控制滚动视图中的平移手势识别器是捕获平移手势,还是捕获平移手势并将其与滚动视图共享。 此外,Application.GetPanGestureRecognizerShouldRecognizeSimultaneously 方法还可用于返回是否与包含 PanGestureRecognizer 的滚动视图共享平移手势的结果。

因此,启用此平台特定功能后,当 ListView 包含 PanGestureRecognizer 时,ListViewPanGestureRecognizer 都将接收平移手势并对其进行处理。 但是,如果禁用此平台特定功能,当 ListView 包含 PanGestureRecognizer 时,PanGestureRecognizer 将捕获平移手势并对其进行处理,而 ListView 将不会接收平移手势。