Вопрос

Работа с Xcode 4.2 и попытка справиться с Uigesturerecognisers. Кажется, пока все идет довольно хорошо, но у меня все еще есть несколько проблем.

Когда я использовал узнаватели жеста, все было хорошо, он узнал бы скип во всех направлениях и делал бы это непрерывно. Теперь моя проблема заключается в том, что при использовании распознавателя жестов жеста он распознает прекрасный панель, но затем просто отказывается принимать какие -либо дальнейшие жесты. Так что я могу перемещать предметы примерно один раз, но после этого ничего не могу сделать.

Я установил свой жест следующим образом:

UIPanGestureRecognizer *panBody = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panBody:)];
[bodyGestureView addGestureRecognizer:panBody];

Тогда это мой метод «панбоди», который справляется со всем этим:

- (void)panBody:(UIPanGestureRecognizer *)recognizer
{
CGPoint translate = [recognizer translationInView:self.view];

CGRect bodyPanelFrame = bodyPanel.frame;
bodyPanelFrame.origin.x += translate.x;
bodyPanelFrame.origin.y += translate.y;
recognizer.view.frame = bodyPanelFrame;

CGRect topPanelFrame = topPanel.frame;
topPanelFrame.origin.x += translate.x;
topPanelFrame.origin.y += translate.y;
recognizer.view.frame = topPanelFrame;

CGRect sidePanelFrame = sidePanel.frame;
sidePanelFrame.origin.x += translate.x;
sidePanelFrame.origin.y += translate.y;
recognizer.view.frame = sidePanelFrame;

NSLog(@"Panning");

if (recognizer.state == UIGestureRecognizerStateEnded)
{
    bodyPanel.frame = bodyPanelFrame;

    if((topPanel.frame.origin.x + translate.x) <= 193)
    {
        topPanel.frame = CGRectMake(topPanelFrame.origin.x, topPanel.frame.origin.y, topPanel.frame.size.width, topPanel.frame.size.height);
    }
    else
    {
        topPanel.frame = CGRectMake(193, 0, topPanel.frame.size.width, topPanel.frame.size.height);
        NSLog(@"Top panel not in frame");
    }

    if((sidePanel.frame.origin.y + translate.y) < 57)
    {
        sidePanel.frame = CGRectMake(sidePanel.frame.origin.x, sidePanelFrame.origin.y, sidePanel.frame.size.width, sidePanel.frame.size.height);
    }
    else
    {
        sidePanel.frame = CGRectMake(0, 56, sidePanel.frame.size.width, sidePanel.frame.size.height);
        NSLog(@"Side panel not in frame");
    }
}
}

BodyPanel, Toppanel и боковая панель - это iboutlets, связанные с наложением Uiview на верхнюю часть моего интерфейса .xib

Если бы кто -то мог пролить свет на эту информацию, это было бы здорово, потому что я абсолютно понятия не имею, что происходит !!

Спасибо,

Матт

Это было полезно?

Решение

Сначала я бы проверил это

if (recognizer.state == UIGestureRecognizerStateChanged)

Прежде чем делать свои переводы (есть много других возможных состояний, которые не оправдывали бы вас каких -либо действий). Кроме того, я бы сбросил перевод при каждом обратном вызове, учитывая, что вы накапливаете их, используя метод Uipangesturerecognizer

- (void)setTranslation:(CGPoint)translation inView:(UIView *)view

Если распознавание жестов остановится, может быть, что другой распознаватель жестов мешает им. У вас все еще есть активный uiswipegesturerecognizer? Если это так, вы, вероятно, должны деактивировать одного из них. Вы также можете посмотреть на этот метод

- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer

что позволяет вам указать, какой распознаватель должен иметь приоритет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top