Необходимо применить UIRotationGestureRecognizer, а затем UILongPressGestureRecongnizer.

Применено UILongPressGestureRecongnizer в одном представлении, проверьте приведенный ниже код для справки.

@interface ViewController ()
{
     UIRotationGestureRecognizer *rotationGestureRecognizer6;
}


- (void)viewDidLoad {

    //--------Added LongPress Gesture----------//
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                               initWithTarget:self
                                               action:@selector(handleLongPress:)];
    longPress.minimumPressDuration = 2.0;
    [view6 addGestureRecognizer:longPress];

    rotationGestureRecognizer6 = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotationWithGestureRecognizer:)];
}

#pragma mark - UILongPressGesture Handler Method

-(void)handleLongPress:(UILongPressGestureRecognizer *)sender {

    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"UIGestureRecognizerStateEnded");
    }
    else if (sender.state == UIGestureRecognizerStateBegan){
        NSLog(@"UIGestureRecognizerStateBegan.");
        [view6 addGestureRecognizer:rotationGestureRecognizer6];
    }
}

#pragma mark - UIRotationGesture Handler Method

-(void)handleRotationWithGestureRecognizer:(UIRotationGestureRecognizer *)recognizer {

    UIView *view = [recognizer view];
    [view setTransform:CGAffineTransformRotate([view transform], [recognizer rotation])];
}

Даже я пытался добавить жест вращения в других состояниях UILongPressGestureRecongnizer, таких как UIGestureRecognizerStateRecognized, UIGestureRecognizerStateChanged, UIGestureRecognizerStatePossible. Ни один не работал у меня.

С какой проблемой я сталкиваюсь, так это то, что после обнаружения жеста logpress он не добавляет жест вращения для одного и того же касания пальца. Мне нужно было оставить это касание пальцем, и снова, когда я попытался повернуть, он будет работать хорошо. Но я хочу, чтобы пользователь мог начать вращение, как только обнаружит жест долгого нажатия.

Любая помощь приветствуется! Заранее спасибо!


person iGatiTech    schedule 22.04.2016    source источник


Ответы (1)


Вы можете захотеть, чтобы представление одновременно реагировало на несколько распознавателей жестов.

Когда вы можете вызвать метод longPressGestureRecognizer и установить Bool,

didReceiveLongPress = YES;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    if(didReceiveLongPress)
       return YES;
    else
       return NO;
}

Я предполагаю, что вы хотите, чтобы вращение происходило только после длительного нажатия. Или вы можете удалить регистр IF и напрямую вернуть YES.

person user3300864    schedule 22.04.2016
comment
Да, я хочу, чтобы поворот происходил только после длительного нажатия. Спасибо за Ваш ответ. Позвольте мне попробовать. - person iGatiTech; 22.04.2016
comment
Превосходно! Работает идеально! Это то, что я точно хочу. Спасибо! - person iGatiTech; 22.04.2016
comment
Привет! Мне интересно. Почему ваше решение работает альтернативно? 1-й раз не работает, 2-й раз, когда я применяю вращение, он работает хорошо, а затем снова 3-й раз, он не работает. Что я сделал, так это назначил делегата на жест долгого нажатия в моем коде и реализовал предоставленный вами метод. Этот метод называется альтернативным. Не то, что я делаю неправильно. Есть ли у вас какие-либо идеи? - person iGatiTech; 22.04.2016
comment
Что может происходить здесь, 1-й раз; ваш shouldRecognizeSimultaneousWithGestureRecognizer: называется bool по умолчанию NO, поэтому он не распознает вращение. Теперь, когда вы долго нажимаете, ваш bool установлен. Итак, 2-й раз он распознает вращение. Опять же, вы, возможно, сбросили boolen; так что это не будет работать в 3-й раз .. но будет работать в 4-й .. и так далее. - person user3300864; 22.04.2016
comment
Нет, это не так. Я нигде не использовал логическое значение. Я просто добавляю такие методы: (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneousWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; } Тем не менее он работает альтернативно. Не знаю почему.. - person iGatiTech; 22.04.2016
comment
убедитесь, что ваше приложение поддерживает все повороты, например, когда ваш iPhone также перевернут. Не должно быть так, чтобы распознаватель вообще не вызывался. Вам придется еще немного покопаться. :) - person user3300864; 22.04.2016
comment
Да, точно! Я тоже рву волосы! Что происходит не так. В качестве альтернативы вызов метода - это то, что мне кажется странным. Так что определенно что-то не так на моем конце. Нужно разобраться! - person iGatiTech; 22.04.2016