如何在停止旋转时检测图像的位置?

时间:2014-08-26 01:28:15

标签: c# wpf visual-studio-2012

我想使用Visual Studios 2012为我的学校项目创建一个滚轮控件。 我现在拥有的是图像,当我点击一个按钮并停在随机位置时,它可以旋转。 但是,我不确定如何在图像停止旋转时检测位置。 这是旋转按钮事件,当我单击按钮时图像旋转。

 private void SpinBtn_Click(object sender, RoutedEventArgs e)
        {

            var ease = new PowerEase { EasingMode = EasingMode.EaseOut };

            Random rng = new Random(Guid.NewGuid().GetHashCode());
            //DoubleAnimation(FromValue. ToValue, Duration)
            DoubleAnimation myanimation = new DoubleAnimation
                    (0, rng.Next(360,720), new Duration(TimeSpan.FromSeconds(3)));

            //Adding Power ease to the animation
            myanimation.EasingFunction = ease;

            RotateTransform rotate = new RotateTransform();

            img.RenderTransform = rotate;
            img.RenderTransformOrigin = new Point(0.5, 0.5);
            rotate.BeginAnimation(RotateTransform.AngleProperty, myanimation);


        }

一旦停止旋转,如何检测图像的位置(指针指向的位置)?因此,当指针指向该对象时,我可以将这些单词拖放到特定的文本框中。

请参阅image

1 个答案:

答案 0 :(得分:2)

你不需要知道图像(指针)指向的位置,只需计算旋转度。

double degree = rng.Next(360, 720);
DoubleAnimation myanimation = new DoubleAnimation
                (0, degree, new Duration(TimeSpan.FromSeconds(3)));
double result_degree = degree % 360;

现在,您可以使用result_degree获取目标对象。

例如:

你有一个像时钟一样的圆圈中的12个物体,所以第一个物体的度数是0到29,第二个是30到59 ....

或者你可以设置对象'你自己的学位,第一是0到9,第二是10到39 ...

关于拖放:

我举一个简单的例子:

 <Grid>
    <TextBox x:Name="tbResult" HorizontalAlignment="Left" AllowDrop="True" Height="23" Margin="416,245,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>

    <TextBlock x:Name="tb1" HorizontalAlignment="Left" MouseLeftButtonDown="MyMouseLeftButtonDown" Margin="280,210,0,0" TextWrapping="Wrap" Text="ob1" VerticalAlignment="Top"/>

    <TextBlock x:Name="tb2" IsEnabled="False" HorizontalAlignment="Left" MouseLeftButtonDown="MyMouseLeftButtonDown" Margin="280,245,0,0" TextWrapping="Wrap" Text="ob2" VerticalAlignment="Top"/>
    <TextBlock x:Name="tb3" IsEnabled="False" HorizontalAlignment="Left"  MouseLeftButtonDown="MyMouseLeftButtonDown" Margin="280,281,0,0" TextWrapping="Wrap" Text="ob3" VerticalAlignment="Top"/>

</Grid>



private void MyMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        TextBlock tb = sender as TextBlock ;
        if(tb != null && tb.IsEnabled == true)
        {
            switch(tb.Name)
            {
                case "tb1" :
                    DragDrop.DoDragDrop(tb1, tb1.Text, DragDropEffects.Copy);
                    break;
                case "tb2":
                    DragDrop.DoDragDrop(tb2, tb2.Text, DragDropEffects.Copy);
                    break;
                case "tb3":
                    DragDrop.DoDragDrop(tb3, tb3.Text, DragDropEffects.Copy);
                    break;
            }
        }

    }

当您获得result_degree并知道选择了哪个对象时,请设置IsEnable = true和其他IsEnable = false,设置TextBox&#39; s AllowDrop = true。在此示例中,仅允许用户拖动ob1