FusionAds-iOS/FusionAds/Classes/fusion/utils/GuruMRecCoordinator.swift

144 lines
4.6 KiB
Swift
Raw Normal View History

//
// GuruBannerCoordinator.swift
// Pods
//
// Created by 250102 on 2025/5/9.
//
protocol GuruMRecView {
func view() -> UIView
func onShow();
func onHide();
}
class GuruMRecCoordinator {
private let viewController: UIViewController
private var mrecAd: GuruMRecView
private var contentView: UIView?
private var currentUid2Token: String = ""
private var horizontalOffset: CGFloat = 0.0
private var verticalOffset: CGFloat = 0.0
private var orientation: ScreenOrientation = .portrait
private let contentId: Int
public init(viewController: UIViewController, mrecAd: GuruMRecView, contentId: Int) {
self.viewController = viewController
self.mrecAd = mrecAd
self.contentId = contentId
}
public func logInfo(_ message: String) {
Logger.i(tag: "GuruBannerCoordinator", message: "\(message)")
}
public func show(request: MRecShowRequest? = nil) -> Bool {
let placement = request?.placement
let newHorizontalOffset = request?.horizontalOffset
let newVerticalOffset = request?.verticalOffset
var shouldReattach = false
// Check if position or offset has changed
if let offset = newVerticalOffset, offset != Float(verticalOffset) {
verticalOffset = CGFloat(offset)
shouldReattach = true
}
if let offset = newHorizontalOffset, offset != Float(horizontalOffset) {
horizontalOffset = CGFloat(offset)
shouldReattach = true
}
// If we already have a view and parameters changed, remove it
if let contentView = contentView, shouldReattach {
logInfo("Parameters changed! Re-attaching view!")
contentView.removeFromSuperview()
self.contentView = nil
}
let mrecAdView = mrecAd.view()
// Create new content view if needed
if contentView == nil {
let container = UIView()
container.tag = contentId
viewController.view.addSubview(container)
container.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
container.leadingAnchor.constraint(equalTo: viewController.view.leadingAnchor),
container.trailingAnchor.constraint(equalTo: viewController.view.trailingAnchor),
container.topAnchor.constraint(equalTo: viewController.view.topAnchor),
container.bottomAnchor.constraint(equalTo: viewController.view.bottomAnchor)
])
contentView = container
// Standard MREC size is 300x250
let mrecWidth: CGFloat = 300
let mrecHeight: CGFloat = 250
mrecAdView.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(mrecAdView)
NSLayoutConstraint.activate([
mrecAdView.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: horizontalOffset),
mrecAdView.topAnchor.constraint(equalTo: container.topAnchor, constant: verticalOffset),
mrecAdView.widthAnchor.constraint(equalToConstant: mrecWidth),
mrecAdView.heightAnchor.constraint(equalToConstant: mrecHeight)
])
mrecAdView.isHidden = false
mrecAd.onShow()
} else {
mrecAd.onShow()
mrecAd.view().isHidden = false
}
return true
}
public func hide() -> Bool {
guard let _ = viewController.view.viewWithTag(contentId) else {
return true
}
if !mrecAd.view().isHidden {
mrecAd.onHide()
mrecAd.view().isHidden = true
}
return true
}
public func destroy() -> Bool{
mrecAd.view().removeFromSuperview()
contentView?.removeFromSuperview()
contentView = nil
return true
}
public func updateOrientation(orientation: ScreenOrientation) -> Bool {
if let _ = viewController.view.viewWithTag(contentId), self.orientation != orientation {
let isVisible = !mrecAd.view().isHidden
mrecAd.onHide()
mrecAd.view().isHidden = true
contentView?.removeFromSuperview()
contentView = nil
if isVisible {
return show()
}
}
self.orientation = orientation
return true
}
}