Google AdMob 干扰 SwiftUI 中的摇动手势
Google AdMob interfering with Shake Gesture in SwiftUI
我有一个在 SwiftUI 中构建的应用程序,它使用摇动手势,在整个开发过程中运行良好。今天我成功地使用 AdMob 添加了一个横幅广告。但是,这样做似乎会阻止摇动手势工作。单独工作的 AdMob 和摇动手势代码如下所示。
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 中,如果我注释掉 BannerVC 调用并将其替换为 "Hello World" 文本,则摇动手势可以正常工作。当我注释掉 "Hello World" 并替换为 BannerVC 调用(如上所示)时,摇动手势不再有效。因此,干扰似乎来自 BannerVC class 代码。
知道为什么吗?以下是摇动手势的工作代码:
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)
}
}
因此,问题与 AdMob 无关。相反,错误是由于我的堆栈中有两个 UIViewController(一个用于摇床,一个用于 AdMob)。一旦我解决了这个问题,它就完美地工作了。
我有一个在 SwiftUI 中构建的应用程序,它使用摇动手势,在整个开发过程中运行良好。今天我成功地使用 AdMob 添加了一个横幅广告。但是,这样做似乎会阻止摇动手势工作。单独工作的 AdMob 和摇动手势代码如下所示。
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 中,如果我注释掉 BannerVC 调用并将其替换为 "Hello World" 文本,则摇动手势可以正常工作。当我注释掉 "Hello World" 并替换为 BannerVC 调用(如上所示)时,摇动手势不再有效。因此,干扰似乎来自 BannerVC class 代码。
知道为什么吗?以下是摇动手势的工作代码:
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)
}
}
因此,问题与 AdMob 无关。相反,错误是由于我的堆栈中有两个 UIViewController(一个用于摇床,一个用于 AdMob)。一旦我解决了这个问题,它就完美地工作了。