РЕДАКТИРОВАТЬ: Боже, ребята, я наконец нашел способ!Я сделал подкласс UIView, и мой игровой вид (в котором находятся все UIScrollViews, UIButtons и т. Д.) Использует этот подкласс.И тогда это был единственный код, который я добавил к подклассу:
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
CGPoint touchSpot = point;
if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"] && touchSpot.y < 512)
{
touchSpot = CGPointMake(touchSpot.x, touchSpot.y+10);
}
UIView *hitView = [super hitTest:touchSpot withEvent:event];
if (hitView == self)
return self; // you can return nil here if you want touches to go through this view (ie transparent space in a HUD overlay or w/e)
return hitView;
}
Пока это хорошо работает ... у человека, сидящего на противоположном конце, есть хороший сенсорный отклик, как у игрока в "доме"" боковая сторона.Остерегайтесь представления представлений поверх этого представления, хотя ... все будет проходить через этот метод ...
Старое решение (до того, как я обнаружил это ^):
Ну, прямо сейчас мое решение состояло в том, чтобы создать подкласс uigesturerecognizer, переместить ЛЮБОЕ касание (то есть без ограничений на распознаватель), а затем добавить его в представление моей игры.Затем метод, который реагирует на любое касание, запускается только тогда, когда состояние завершено, и, если это так, он затем перебирает все подпредставления (не многие), чтобы увидеть, пересекалось ли прикосновение.Кроме того, для противоположного игрока он немного сравнивает смещение прямоугольника (для каждого из подпредставлений).
Я посмотрю, смогу ли я найти более эффективный способ ... но пока все в порядке.
Я мог бы также сделать свой игровой вид подклассом uiview и переопределить прикосновения, начал / переместил / закончил, но у меня уже было все это размещено, поэтому я пошел с распознавателем (таким образом, не нужно подкласс uiview).