У меня есть приложение, встроенное в 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)
}
}