2013-07-28 54 views
0

我已經從codeplex中下載了允許手機接收手勢支持的Windows手機工具包。在我的應用程序中,我有一個橢圓。我想要創建一種方法,當屏幕接收到向上的垂直手勢時順時針旋轉橢圓形,當它收到向下的垂直手勢時,順時針旋轉&。我在谷歌上花了很多時間,但效果很差,我該如何實現這一操作?使用手勢旋轉垂直拖動的橢圓

+0

將RotateTransform應用到橢圓,通過使用頁面的ManipulationDelta事件檢測垂直手勢,並相應地更改RotateTransform的角度 –

+0

我可以將RotateTransform寫入到Ellipse,但我無法想出邏輯以檢測垂直手勢,你能舉個例子嗎? –

回答

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,加速旋轉,< 1慢下來)。此外,如果您不希望形狀在手指沿對角線移動時旋轉,請檢查e.DeltaManipulation.Translation.X的值,並僅在其小於e.DeltaManipulation.Translation.Y的範圍內應用旋轉(您不能只檢查它是否等於0,因爲手指在做垂直手勢時總是會稍微向左或向右移動)。

+0

當我向任一方向旋轉手指時,代碼工作正常,但是當我從橢圓開始向上/向下方向製作垂直手勢時,橢圓會旋轉90度然後停止,爲什麼會發生這種情況? –

+0

@ Sidsec9確實。說實話,我不知道如何解釋這種行爲。你可以通過在橢圓上設置IsHitTestVisible =「False」來防止它,但這是一個骯髒的修復。 –

+0

我想出了一個新的解決方案。我複製了橢圓並將其粘貼在舊的橢圓上。新的橢圓具有不透明度= 0,並且將您的代碼應用於新的橢圓以旋轉舊的橢圓。這工作正常! –