UWP 缩放操作(收缩)事件调用不一致
UWP scale manipulation (pinch) events invoked inconsistently
我正在尝试检测我的应用程序中的缩放操作(收缩),但由于某些原因,事件调用不一致(有时是,有时不是)。
我创建了一个可以轻松复制的示例应用程序:
<Page
x:Class="Manipulate.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid Background="Red" ManipulationMode="Scale" ManipulationDelta="Grid_ManipulationDelta" ManipulationStarted="Grid_ManipulationStarted"/>
</Page>
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
namespace Manipulate
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Grid_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Started {e.}");
}
private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Delta {e.Delta.Scale}");
}
}
}
在我的实际应用程序中,我正在尝试实现缩放以放大我们的自定义相机实现(受 https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/CameraManualControls 启发)但是我似乎无法让它工作,因为 ManipulationStarted
和ManipulationDelta
在每次捏合手势时始终被调用。
我在多个 Surface 设备(Surface Book、Surface Go、Surface Pro 4)上看到了这个。
请查看此 Touch interactions 文档。
捏合操作手势两个或多个手指触摸屏幕 并靠得更近。换句话说,您需要关闭两个压着的手指。我用模拟器测试过,效果很好。这里是 sample code 你可以参考。
_compositeTransform.ScaleX = _compositeTransform.ScaleY = e.Delta.Scale;
更新
来自@Cosmin 我使用 20226.1000 的 Windows 版本似乎有问题。问题已修复 请查看博客 here。
我正在尝试检测我的应用程序中的缩放操作(收缩),但由于某些原因,事件调用不一致(有时是,有时不是)。
我创建了一个可以轻松复制的示例应用程序:
<Page
x:Class="Manipulate.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid Background="Red" ManipulationMode="Scale" ManipulationDelta="Grid_ManipulationDelta" ManipulationStarted="Grid_ManipulationStarted"/>
</Page>
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
namespace Manipulate
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Grid_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Started {e.}");
}
private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Delta {e.Delta.Scale}");
}
}
}
在我的实际应用程序中,我正在尝试实现缩放以放大我们的自定义相机实现(受 https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/CameraManualControls 启发)但是我似乎无法让它工作,因为 ManipulationStarted
和ManipulationDelta
在每次捏合手势时始终被调用。
我在多个 Surface 设备(Surface Book、Surface Go、Surface Pro 4)上看到了这个。
请查看此 Touch interactions 文档。
捏合操作手势两个或多个手指触摸屏幕 并靠得更近。换句话说,您需要关闭两个压着的手指。我用模拟器测试过,效果很好。这里是 sample code 你可以参考。
_compositeTransform.ScaleX = _compositeTransform.ScaleY = e.Delta.Scale;
更新
来自@Cosmin 我使用 20226.1000 的 Windows 版本似乎有问题。问题已修复 请查看博客 here。