【问题标题】:Capture x and y of user touch, iOS Xamarin Forms捕获用户触摸的 x 和 y,iOS Xamarin Forms
【发布时间】:2017-04-15 19:38:01
【问题描述】:

我正在使用 Xamarin Forms(Xamarin Studio 社区)编写 iOS 应用程序。我只需要捕获用户触摸并释放按钮的坐标。

我在 Google 上进行了搜索,但只找到了根本不起作用的响应。它们要么适用于 Android,要么适用于 Swift,要么适用于 XCode,要么适用于实际应用。

我见过的最接近的答案是“目前无法在 Xamarin Forms 中执行此操作”。这对我来说似乎很荒谬,因为它似乎是程序员需要的最基本、最基本的东西之一。

我只需要从用户触摸和释放的位置捕获 x,y。我的处理程序都准备好了。

    thisHereButton.TouchDown += (object sender, System.EventArgs e) =>
    {
        //pressed
        touchX = [x];
        touchY=[y];
    };
     thisHereButton.TouchUpInside += (object sender, System.EventArgs e) =>
    {
        //released
        releaseX = [x];
        releaseY=[y];
    }; 

就是这样。如果有人能提供一个简单实用的答案,那就太好了!

编辑:有赏金会进行额外的研究,希望有人能提供帮助。

我遵循了 cmets 中的建议,经过一些分析,确定这是最相关的代码块。

private bool touchStartedInside;
        public override void TouchesMoved(NSSet touches, UIEvent evt)
        {
            base.TouchesMoved(touches, evt);
            // get the touch
            UITouch touch = touches.AnyObject as UITouch;
            if (touch != null)
            {
                //==== IMAGE TOUCH
                if (backdrop.Frame.Contains(touch.LocationInView(View)))
                {
                    //TouchStatus.Text = "Touches Moved";
                }

                //==== IMAGE DRAG
                // check to see if the touch started in the drag me image
                if (touchStartedInside)
                {
                    // move the shape
                    float offsetX = (float)(touch.PreviousLocationInView(View).X - touch.LocationInView(View).X);
                    float offsetY = (float)(touch.PreviousLocationInView(View).Y - touch.LocationInView(View).Y);
                    txt_sizeValText.Text = "" + offsetY;
                    //DragImage.Frame = new RectangleF(new PointF(DragImage.Frame.X - offsetX, DragImage.Frame.Y - offsetY), DragImage.Frame.Size);
                }
         }
        }  

这直接取自他们的示例。就在代码中,它给了我我正在寻找的东西,以及我最终真正需要的“偏移”的好处。 所以我的代码中有这个 void 并且代码仍然可以编译,所以没有错误。

我唯一想不通的是如何利用这个空白。你怎么称呼它? 如果我必须使用与原始帖子中的处理程序不同的处理程序,那很好。不管你能告诉我如何使这项工作......

【问题讨论】:

  • Forms 不直接支持它,但您可以通过自定义渲染器来实现。
  • 我读到的一件事是 UITapGestureRecognizer。但是我看到的例子太复杂了。当我只需要一个简单的轮滑鞋时,这就像制造一辆赛车。
  • 它可能看起来很复杂,但尝试一下,它并没有那么糟糕。 These samples 看起来还不错。要从表单中获取它们,请将其包装在自定义渲染器或效果中,然后就可以开始了。
  • 最后两件事,“自定义渲染器或效果”是我不知道的。上面提供的代码存在于 ViewDidLoad void 中。您发布的链接是我找到的链接之一。而且看起来很接近。我仍然不确定如何实际使用它。

标签: c# xamarin.ios xamarin.forms


【解决方案1】:

您不需要调用 TouchesMoved() 方法。它在 Objective C 运行时调用它时自动调用(它是要调用的方法的覆盖) - 它基本上是本机事件的处理程序。您已经可以获得偏移量,并且可以在该方法中引发您自己的事件来更改您的按钮。已经完成了。

【讨论】:

  • 我非常感谢您的努力。但这向我展示了太多。我不想花一整天的时间来筛选这个只是为了找到我想要的东西。如果您可以简化这一点 - 将其提炼成答案所必需的部分,我将不胜感激。
  • 重读问题后 - 你基本上完成了。重写了答案。
  • 我也是这么想的。该行 txt_sizeValText.Text = "" + offsetY;是为了测试 offsetY 是否在变化。事实并非如此。但从你所说的来看,偏移量变量应该是变化的?
  • 好的...我把这个给你。即使您没有确切提供答案,但您提供的解释足以让我走上正轨。所以我有点让它工作。也就是说,我让它响应触摸。我只需要弄乱它,直到它做我想要的。谢谢!
  • 还应注意...我无法使其正确响应的原因是因为我正在跟踪的对象是一个按钮。所有这些例程似乎都是针对图像的。我不知道为什么他们被区别对待,也许这是一个 API 的事情。
猜你喜欢
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多