I've managed to create a workaround. It is pretty straightforward. I've subclassed UIWindow and used touchesBegan/touchesMoved/etc. methods to simulate gesture recognition.
It works. UIWindow is not rotated automatically, so I have to transform touch coordinates accordingly.
Here is my version of the transformation:
- (CGPoint)transformPoint:(CGPoint)point {
CGPoint pointInView = point;
if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
pointInView.x = self.bounds.size.width - pointInView.x;
pointInView.y = self.bounds.size.height - pointInView.y;
} else if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft) {
CGFloat x = pointInView.x;
CGFloat y = pointInView.y;
pointInView = CGPointMake(self.bounds.size.height - y, x);
} else if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight) {
CGFloat x = pointInView.x;
CGFloat y = pointInView.y;
pointInView = CGPointMake(y, self.bounds.size.width - x);
}
return pointInView;
}