UISwipeGestureRecognizer и ShareExtension: различное поведение на iOS 12.4 и 13.0 и более поздних версиях (ошибка или недокументировано?) - PullRequest
3 голосов
/ 26 мая 2020

Я создаю расширение Share и столкнулся со странным поведением во время тестов на iOS 13.0 и новее. Я использую UISwipeGestureRecognizer для интерпретации жестов прокрутки пользователя в основном представлении в моем расширении.

Этот простой код, приведенный ниже, является примером того, что я хочу, и отлично работает на 12.4 и старше:

@interface ShareAndSwipeRootController ()
@end

@implementation ShareAndSwipeRootController

- (void)loadView {
    [super loadView];

    [self.view setBackgroundColor:[UIColor redColor]];
    [self.view setUserInteractionEnabled:YES];

    UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
    swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
    [self.view addGestureRecognizer:swipeUpGestureRecognizer];

    UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDown:)];
    swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeDownGestureRecognizer];

 };

-(void) swipeUp:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"SWIPE Up");
}

-(void) swipeDown:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"SWIPE Down");
}

@end

На iOS 13.0 и новее ничего не регистрирует. Вы можете проверить разницу на iOS Симуляторе для соответствующих версий.

Возможно, кто-то решил эту проблему и знает причину или нашел ее описание - поделитесь результатом.

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 июня 2020

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

Так как это сервер распознавания жестов. вам нужно попробовать shouldRecognizeSimultaneouslyWith метод, как написано ниже:

gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)

Если все пойдет хорошо, будет написано True.

0 голосов
/ 11 июня 2020

Влад, этот код отлично работает на моем симуляторе и устройстве (13.5), но я предлагаю вам сделать это по-другому.

Это немного тяжеловато для реализации loadView, и если вы это сделаете, вы не должны вызовите super в этом методе.

Почему бы не переместить код как есть в viewDidLoad, куда вы обычно добавляете жесты? Так что удалите loadView и сделайте

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor redColor]];
    [self.view setUserInteractionEnabled:YES];

    UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
    swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
    [self.view addGestureRecognizer:swipeUpGestureRecognizer];

    UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDown:)];
    swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeDownGestureRecognizer];

 };
...