2015-09-03 2 views
1

Я сейчас работаю над графическим приложением WP10. Мне нужно использовать GestureRecognizer для перемещения и изменения размеров объектов на экране. Выглядит как-то круто, но в некоторых случаях с помощью двух жестов пальца GestureRecognizer выдает эту ошибку.GestureRecognizer выбрасывает исключение в WP Direct3D App

Информация об WinRT: Пакеты в рамке несовместимы. Либо идентификаторы указателей не уникальны, либо существует несоответствие по меткам времени, идентификаторам фреймов, типам указателей или исходным устройствам.

Все в порядке с помощью одного пальца. Странная вещь здесь в том, что эта логика отлично работает на WP8.1.

Это исходный код моего RecognizerHelper:

GestureHelper::GestureHelper(){ 
    this->recognizer = ref new GestureRecognizer(); 

    this->recognizer->GestureSettings = GestureSettings::ManipulationScale | GestureSettings::ManipulationTranslateX | 
    GestureSettings::ManipulationTranslateY | GestureSettings::Tap | GestureSettings::ManipulationRotate | GestureSettings::DoubleTap; 

    this->recognizer->Tapped += ref new TypedEventHandler<GestureRecognizer ^, TappedEventArgs ^>(this, &GestureHelper::OnTapped); 
    this->recognizer->ManipulationStarted += ref new TypedEventHandler<GestureRecognizer ^, ManipulationStartedEventArgs ^>(this, &GestureHelper::OnManipulationStarted); 
    this->recognizer->ManipulationCompleted += ref new TypedEventHandler<GestureRecognizer ^, ManipulationCompletedEventArgs ^>(this, &GestureHelper::OnManipulationCompleted); 
    this->recognizer->ManipulationUpdated += ref new TypedEventHandler<GestureRecognizer ^, ManipulationUpdatedEventArgs ^>(this, &GestureHelper::OnManipulationUpdated); 
} 

void GestureHelper::ProcessPress(PointerPoint ^ppt){ 
    this->recognizer->ProcessDownEvent(ppt); 
    if (this->Clicked) { 
     this->Clicked(ppt->Position.X, ppt->Position.Y); 
    } 
} 

void GestureHelper::ProcessMove(PointerPoint ^ppt){ 
    this->recognizer->ProcessMoveEvents(ppt->GetIntermediatePoints(ppt->PointerId)); 
} 

void GestureHelper::ProcessRelease(PointerPoint ^ppt){ 
    this->recognizer->ProcessUpEvent(ppt); 
} 



void GestureHelper::OnManipulationStarted(GestureRecognizer^ sender, ManipulationStartedEventArgs^ e){ 
    if (this->Pressed){ 
     this->Pressed(e->Position.X, e->Position.Y); 
    } 
} 

void GestureHelper::OnManipulationCompleted(GestureRecognizer ^sender, ManipulationCompletedEventArgs ^e) { 
    if (this->Released) { 
     this->Released(e->Position.X, e->Position.Y); 
    } 
} 

void GestureHelper::OnManipulationUpdated(GestureRecognizer ^sender, ManipulationUpdatedEventArgs ^e){ 
    if (this->MoveUpdated){ 
     this->MoveUpdated(e->Position.X, e->Position.Y); 
    } 
    if (this->ZoomUpdated){ 
     this->ZoomUpdated(e->Delta.Scale); 
    } 
    if (this->RotateUpdated) { 
     this->RotateUpdated(-e->Delta.Rotation); 
    } 
} 

void GestureHelper::OnTapped(GestureRecognizer ^sender, TappedEventArgs ^e){ 
    if (this->Pressed) { 
     this->Pressed(e->Position.X, e->Position.Y); 
    } 
    if (this->Released){ 
     this->Released(e->Position.X, e->Position.Y); 
    } 
} 

Спасибо за любую помощь!

UPD: Try-улов помог, но все-таки хотелось бы понять, почему это исключение бросает

ответ

1

Хорошо, я получил ответ на майкрософт форуме. Это ошибка Microsoft, которая будет исправлена ​​в следующих обновлениях. Поэтому теперь я использую try catch для решения этой проблемы.

Ответьте на это сообщение: https://social.msdn.microsoft.com/Forums/ru-RU/2353edb7-8c1c-4a8d-9e57-ece72f863616/uwpgesturerecognizer-throws-exception-in-wp-direct3d-app?forum=wpdevelop

Смежные вопросы