Я хочу проверить, что Rectangle
был прослушан.Этот метод выполняет свою работу, и он работает почти так, как я хочу:
private bool CheckRectangleTouch(Rectangle target)
{
var touchCollection = TouchPanel.GetState();
if (touchCollection.Count > 0)
{
foreach (var touch in touchCollection)
{
if (target.Contains(touch.Position))
{
return true;
}
}
}
return false;
}
Проблема у меня заключается в том, что после того, как я коснулся прямоугольника, он продолжает возвращать true
, пока я не отпущу его (он может зарегистрировать 10-30раз за одно нажатие), и я хочу, чтобы он возвращал true
только один раз - для первого касания.
Я пробовал это (заменить код внутри foreach
):
var isFirstTouch = !touch.TryGetPreviousLocation(out _);
if (target.Contains(touch.Position) && isFirstTouch)
{
return true;
}
И это (плохо, я не хочу, чтобы оно регистрировалось после релиза):
if (target.Contains(touch.Position) && touch.State == TouchLocationState.Released)
{
return true;
}
Но ничего не делает.Либо логика не согласована, либо не работает вообще.
Итак, как я могу проверить на наличие крана?
Обновление: это работает, но это очень странно, имеет задержку и дает мне случайные фантомные нажатия:
try
{
var tap = TouchPanel.ReadGesture(); // falls each time when no input
return tap.GestureType == GestureType.Tap && target.Contains(tap.Position);
}
catch { }
return false;