【问题标题】:Rotate an ellipse with vertical drag using gesture使用手势垂直拖动旋转椭圆
【发布时间】:2013-07-28 10:43:06
【问题描述】:

我已经从 codeplex 下载了 windows phone 工具包,它使手机能够接收手势支持。在我的应用程序中,我有一个椭圆。我想创建一个方法,当屏幕接收到向上垂直手势时逆时针旋转椭圆,当它接收到向下垂直手势时顺时针旋转椭圆。我在google上花了很多时间,但效果不佳,我该如何实现这个操作?

【问题讨论】:

  • 对Ellipse应用RotateTransform,利用页面的ManipulationDelta事件检测垂直手势,并相应改变RotateTransform的角度
  • 我可以将 RotateTransform 写入 Ellipse 但我无法提出检测垂直手势的逻辑,你能举个例子吗?

标签: c# windows-phone-7 xaml silverlight-toolkit


【解决方案1】:

首先,将 RotateTransform 分配给要旋转的控件。这里我使用了一个矩形,因为它更容易看到它的旋转,但它也适用于椭圆:

<Rectangle Fill="Blue" Height="50" Width="50">
    <Rectangle.RenderTransform>
        <RotateTransform x:Name="RotateTransform" />
    </Rectangle.RenderTransform>
</Rectangle>

然后,订阅您页面的ManipulationDelta 事件:

<phone:PhoneApplicationPage 
    x:Class="..."
    various stuff
    ManipulationDelta="PhoneApplicationPage_ManipulationDelta">

在事件处理程序中,使用e.DeltaManipulation.Translation 了解手指在 X 和 Y 轴上移动了多少。然后,相应地旋转您的形状:

private void PhoneApplicationPage_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    this.RotateTransform.Angle += e.DeltaManipulation.Translation.Y;
}

如果您希望形状以不同的速度旋转,请将e.DeltaManipulation.Translation.Y 乘以一个常数(> 1 加速旋转,e.DeltaManipulation.Translation.X 的值并仅在它小于 e.DeltaManipulation.Translation.Y 时应用旋转(您不能只检查它是否等于0,因为在做垂直手势时手指总是会稍微向左或向右移动)。

【讨论】:

  • 当我向任一方向旋转手指时,代码工作正常,但是当我从椭圆开始向上/向下方向做出垂直手势时,椭圆旋转了 90 度然后停止,为什么发生了吗?
  • @Sidsec9 确实如此。老实说,我不知道如何解释这种行为。您可以通过在椭圆上设置 IsHitTestVisible="False" 来防止它,但这是一个肮脏的修复。
  • 我想出了一个新的解决方案。我复制了椭圆并将其粘贴在旧椭圆上。新椭圆的不透明度 = 0,您的代码将应用于新椭圆以旋转旧椭圆。这很好用!
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多