Download

Replay Kit On-Complete Popup Interrupts Unreal Touch Behaviors (Prevents taps from being released)

Hey Unreal gurus,

We ran into an issue involving Touch events not releasing. Currently it is **only witnessed on iPhone, but not on iPad. **More specifically, our app is using ARKit with iPhones running iOS 11 with Unreal 4.18.

Here’s the issue:

  • Use Case:

  • Using Apple’s Replay Kit, we record X seconds of video.

  • Once the recording completes, a popup appears on the screen that shows a preview of the video and provides sharing options.

  • The player closes the video preview window.

  • The Bug:

  • If the player happened to be touching the screen when the recording completes (and the popup subsequently appears), those touch events don’t get “released.”

  • Any touches that occur in-game after the popup goes away are recorded as a higher finger index than they actually are.

  • For example - Let’s say I was holding index 1 finger in game. The popup appears for video sharing / previewing, which I then close. From that point all subsequent index 1 taps are registered by our Touch blueprint component as index 2.

  • Our Planned Workaround (until a suitable solution is found):

  • Create a UX flow where players are essentially forced to stop touching the screen. Not exactly ideal, heh.

This is kind of a strange edge case and we’ll try to attach an example project soon. I’m posting this content beforehand just to get it out there as we prepare additional content in case y’all have any ideas.

Our interim solution is to (1) flush all Unreal input and then (2) set all iOS touch values to nil in C++. Would post code, but legal mumbo jumbo means we probably shouldn’t be posting internally used code heh.

(1) Flush the Unreal input
UGameplayStatics::GetPlayerController(GetWorld(), 0)->PlayerInput->FlushPressedKeys();

(2) For each iOS input,
[IOSAppDelegate GetDelegate].IOSView->AllTouches* = nil;