Добавьте распознаватель жестов касания в PDFView в iOS 13 - PullRequest
5 голосов
/ 30 сентября 2019

Мой код работает в iOS 12. Но после обновления до iOS 13 он не работает.

let pinPointRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.pinPoint(sender:)))
pinPointRecognizer.numberOfTapsRequired = 1
self.pdfView.addGestureRecognizer(pinPointRecognizer)

Я попытался добавить pinPointRecognizer.numberOfTouchesRequired = 2, и он может вызвать функцию pinPoint(). Но я хочу вызвать pinPoint() одним нажатием.

Является ли это поведение ошибкой, которая будет исправлена ​​в будущей версии iOS? Есть ли способ исправить это?

Спасибо!

Обновлено:

Спасибо всем за ответ! Мне жаль, что у меня может не быть времени проверить все ваши ответы. Я изменил поведение своего приложения, чтобы обойти эту проблему.

Мне нужно указать точку в файле PDF. Мой обходной путь - добавить дополнительный слой, который отображает значок булавки в центре PDFView. Когда пользователь нажимает на представление PDF, я добавляю одну аннотацию изображения значка булавки в PDFView.

Одним словом, в моем обходном пути я все еще использую распознаватель жестов касания. Но распознаватель только прикрепляет точку в центре текущего PDFView. Пользователь может увеличивать / уменьшать масштаб и перетаскивать его, чтобы контролировать, где можно закрепить точку.

Ответы [ 4 ]

2 голосов
/ 14 октября 2019
let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(toggleTopBottomView(_:)))
            singleTapGesture.numberOfTapsRequired = 1
            singleTapGesture.delegate = self
            self.pdfContainerView.addGestureRecognizer(singleTapGesture)


    @objc func toggleTopBottomView(_ sender: UITapGestureRecognizer){

    }


func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
0 голосов
/ 14 октября 2019

Вы можете попробовать это с Xcode 11, iOS 13

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))

    tap.numberOfTapsRequired = 1

    view.addGestureRecognizer(tap)

    view.isUserInteractionEnabled = true

}

@objc func handleTap(_ sender: UITapGestureRecognizer) {
    print("Tapped")
}
0 голосов
/ 09 октября 2019

На самом деле я установил 13.2 Beta с той же проблемой, но я нашел обходной путь для меня. Я проверил это с 13.1, и это работает также. Когда я действительно добавил распознаватель жестов касания, он работал на ios 13, однако он поглощал касания в ссылках. Вот что я сделал, чтобы решить эту проблему: я переопределил addGestureRecognizer на подклассе PDFView, затем я прокручиваю и нахожу тот, который является жестом касания одним касанием (это обеспечивается яблоком для обработки ссылок), и создаю свой новыйнажмите, чтобы показать / скрыть меню (или ваши собственные действия). Я добавляю его в PDFView и требую, чтобы встроенный один от Apple в Fail (строка 15).

Затем я разрешаю mustRecognizeSim одновременноouslyWithGesture, который позволяет обоим жестам касания вызывать корректность. Если вы нажмете на ссылку, моя новая не будет вызвана, но если вы не нажмете на ссылку, она будет отлично работать и покажет / скрывает мое меню. Надеюсь это кому-нибудь пригодится!

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{  
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
    {
        UITapGestureRecognizer *tapGest = (UITapGestureRecognizer*)gestureRecognizer;
        if (tapGest.numberOfTapsRequired == 1)
        {
            if (![tapGest isEqual:singleTapGesture])
            {
                if (![self.gestureRecognizers containsObject:singleTapGesture])
                {
                    singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
                    [singleTapGesture setNumberOfTapsRequired:1];
                    [singleTapGesture setDelegate:self];
                    [singleTapGesture requireGestureRecognizerToFail:tapGest];
                    [self addGestureRecognizer:singleTapGesture];
                }
            }
        }
    }

    [super addGestureRecognizer:gestureRecognizer];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
  return YES;
}
0 голосов
/ 04 октября 2019

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

...