Смещение iOS (Авто) на iPad - PullRequest
       28

Смещение iOS (Авто) на iPad

6 голосов
/ 24 октября 2011

Информации об этом почти нет, поэтому вот моя проблема:

Я работаю над игрой для 2 игроков «сиди напротив друг друга», а игроку, находящемуся на противоположной стороне, трудно нажимать кнопки ... потому что кажется, что Apple автоматически смещает касание на основе ориентация устройства (что отлично подходит для обычного использования или основного плеера). Есть ли способ сбросить его или сказать ipad не делать этого? (Кстати, iPhone это тоже делает)

Это все, что я нашел: Учитывая это явное несоответствие, я решил просто обмануть его, открыв «границы» движущихся частей, чтобы пользователь мог попасть под область детали. В целом пользователи, кажется, попадают ниже объекта, а не над ним, поэтому не замечайте смещения, вызванного iOS.

Итак, если нет простого способа предотвратить смещение, является ли единственным решением сдвинуть границы каждого пользовательского интерфейса (или подкласса) для противоположного игрока? Или это даже правильно?

Любые ответы приветствуются.

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

РЕДАКТИРОВАТЬ: Боже, ребята, я наконец нашел способ!Я сделал подкласс 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).

3 голосов
/ 24 октября 2011

Да, смещение касания существует, его размер не задокументирован и его нельзя отменить (по крайней мере, с помощью публичного API).

Вы должны перепроектировать само смещение. Я бы просто отобразил маленький кружок, где UIKit говорит о касании, и затем настроил его методом проб и ошибок. Когда у вас есть смещение, вы можете вручную применить его (смещение -2 *) в обработчиках событий только для противоположного игрока.

Я не могу сказать, насколько правильно он будет чувствовать , вам придется немного поэкспериментировать.

...