Google AdMob вмешивается в Shake Gesture в SwiftUI - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть приложение, встроенное в SwiftUI, которое использует жест встряхивания, которое отлично работало на протяжении всей разработки. Сегодня я успешно добавил баннер с помощью AdMob. Однако, похоже, что это не позволяет работать жесту встряхивания. Индивидуально работающий код AdMob и Shake Gesture показан ниже.

Рекламный баннер AdMob вызывается следующим образом:

final private class BannerVC: UIViewControllerRepresentable  {

    let bannerID = “my-BannerAd-Unit-ID-here“

    func makeUIViewController(context: Context) -> UIViewController {
        let view = GADBannerView(adSize: kGADAdSizeBanner)

        let viewController = UIViewController()
        view.adUnitID = bannerID
        view.rootViewController = viewController
        viewController.view.addSubview(view)
        viewController.view.frame = CGRect(origin: .zero, size: kGADAdSizeBanner.size)
        view.load(GADRequest())

        return viewController
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}



struct BannerAdView: View {
    var body: some View {
//        Text("Hello, World!")

        HStack{
            Spacer()
            BannerVC().frame(width: 320, height: 50, alignment: .center)
            Spacer()
        }

    }
}

В BannerAdView Shake Gesture работает нормально, если я закомментирую вызов BannerV C и его замена текстом «Hello World». Когда я комментирую «Hello World» и заменяю на вызов BannerV C (как показано выше), Жест встряхивания больше не работает. Таким образом, помехи, похоже, исходят от кода класса BannerV C.

Есть идеи почему? Ниже приведен рабочий код для Жеста встряхивания:

struct ShakableViewRepresentable: UIViewControllerRepresentable {

    class Coordinator: NSObject {
        var parent: ShakableViewRepresentable
        init(_ parent: ShakableViewRepresentable) {
            self.parent = parent
        }
    }

    func makeCoordinator() -> ShakableViewRepresentable.Coordinator {
        Coordinator(self)
    }

    func makeUIViewController(context: Context) -> ShakableViewController {
        ShakableViewController()
    }

    func updateUIViewController(_ uiViewController: ShakableViewController, context: Context) {}
}

class ShakableViewController: UIViewController {

    override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        guard motion == .motionShake else { return }
        shuffleItems(newGame: false)
    }
}

1 Ответ

0 голосов
/ 08 апреля 2020

Итак, проблема не имеет ничего общего с AdMob. Вместо этого ошибка была связана с тем, что в моем стеке было два UIViewController (один для шейкера и один для AdMob). Как только я это исправил, все заработало отлично.

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