插页式广告的 iAd 自定义过渡
iAd custom transition for interstitial ads
我想将 ADInterstitialAd
s 视为常规 UIView,以便在使用时获得一些灵活性。
例如,默认的插页式过渡是slide up from the bottom of the screen
。我不喜欢那样。是否可以先将 alpha 值修改为 0,然后再将其更改为 1?
另一个例子是在全屏前添加不同的 UIView 一小段时间,即只是在 ADInterstitialAd
的过渡过程中? ADInterstitialAd
s 往往是视图层次结构中最顶层的视图。我想如果我设法将 ADInterstitialAd
s 视为常规 UIView,我可以做到这一点。关于如何实现这一点有什么建议吗?
您可以只设置 AdBannerView
的 alpha 值的动画来达到您想要的效果:
import iAd
private var bannerView: AdBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// Create your banner view however you want, and add it to your UI.
bannerView = AdBannerView()
bannerView.alpha = 0
addSubview(bannerView)
}
// When you want to show the ad, animate the alpha.
private func animateInAd(appearing: Bool) {
UIView.animateWithDuration(1.0) [weak self] {
self?.bannerView.alpha = appearing ? 1 : 0
}
}
这是您可以展示 bannerView 的另一种方式。您可以在广告向上滑动完成后移除其顶部的视图:
import iAd
private var coverView: UIView!
private var bannerView: AdBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// Create your banner view however you want, and add it to your UI.
bannerView = AdBannerView()
addSubview(bannerView)
// Create the cover view however you want, and add it above the banner view.
coverView = UIView()
addSubview(coverView)
}
private func animateInAd(appearing: Bool) {
let hideAdPosition = view.frame.size.height
let showAdPosition = hideAdPosition - bannerView.frame.size.height
UIView.animateWithDuration(1.0, animations: [weak self] {
self?.bannerView.frame.origin.y = appearing ? showAdPosition : hideAdPosition
}) { [weak self] success in
self?.animateCover(appearing: !appearing)
}
}
private func animateCover(appearing: Bool) {
UIView.animateWithDuration(1.0) [weak self] {
self?.coverView.alpha = appearing ? 1 : 0
}
}
编辑:
至于 ADInterstitialAd
,它们似乎是从 NSObject
继承的,并且有显式方法需要调用才能显示它们(presentInView:
和 presentFromViewController:
) .因此,没有 public API 来控制这些广告的呈现方式(这很可能是故意的,以便 Apple 可以保证向用户展示广告)。
我没有这方面的经验,但看看 documentation 你应该能够创建自己的视图,使用 presentInView:
,并在该视图上执行你想要的任何动画。
我想将 ADInterstitialAd
s 视为常规 UIView,以便在使用时获得一些灵活性。
例如,默认的插页式过渡是slide up from the bottom of the screen
。我不喜欢那样。是否可以先将 alpha 值修改为 0,然后再将其更改为 1?
另一个例子是在全屏前添加不同的 UIView 一小段时间,即只是在 ADInterstitialAd
的过渡过程中? ADInterstitialAd
s 往往是视图层次结构中最顶层的视图。我想如果我设法将 ADInterstitialAd
s 视为常规 UIView,我可以做到这一点。关于如何实现这一点有什么建议吗?
您可以只设置 AdBannerView
的 alpha 值的动画来达到您想要的效果:
import iAd
private var bannerView: AdBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// Create your banner view however you want, and add it to your UI.
bannerView = AdBannerView()
bannerView.alpha = 0
addSubview(bannerView)
}
// When you want to show the ad, animate the alpha.
private func animateInAd(appearing: Bool) {
UIView.animateWithDuration(1.0) [weak self] {
self?.bannerView.alpha = appearing ? 1 : 0
}
}
这是您可以展示 bannerView 的另一种方式。您可以在广告向上滑动完成后移除其顶部的视图:
import iAd
private var coverView: UIView!
private var bannerView: AdBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// Create your banner view however you want, and add it to your UI.
bannerView = AdBannerView()
addSubview(bannerView)
// Create the cover view however you want, and add it above the banner view.
coverView = UIView()
addSubview(coverView)
}
private func animateInAd(appearing: Bool) {
let hideAdPosition = view.frame.size.height
let showAdPosition = hideAdPosition - bannerView.frame.size.height
UIView.animateWithDuration(1.0, animations: [weak self] {
self?.bannerView.frame.origin.y = appearing ? showAdPosition : hideAdPosition
}) { [weak self] success in
self?.animateCover(appearing: !appearing)
}
}
private func animateCover(appearing: Bool) {
UIView.animateWithDuration(1.0) [weak self] {
self?.coverView.alpha = appearing ? 1 : 0
}
}
编辑:
至于 ADInterstitialAd
,它们似乎是从 NSObject
继承的,并且有显式方法需要调用才能显示它们(presentInView:
和 presentFromViewController:
) .因此,没有 public API 来控制这些广告的呈现方式(这很可能是故意的,以便 Apple 可以保证向用户展示广告)。
我没有这方面的经验,但看看 documentation 你应该能够创建自己的视图,使用 presentInView:
,并在该视图上执行你想要的任何动画。