Я сейчас работаю над графическим приложением 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-улов помог, но все-таки хотелось бы понять, почему это исключение бросает