#if defined(__has_include) && __has_include("UnityAppController.h") #import "UnityAppController.h" #else #import "EmptyUnityAppController.h" #endif #import #import "AppodealUnityBannerView.h" #define BANNER_X_POSITION_SMART -1 #define BANNER_X_POSITION_CENTER -2 #define BANNER_X_POSITION_RIGHT -3 #define BANNER_X_POSITION_LEFT -4 #define BANNER_Y_POSITION_BOTTOM 8 #define BANNER_Y_POSITION_TOP 16 @implementation AppodealUnityBannerView + (instancetype)sharedInstance { static AppodealUnityBannerView *sharedInstance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; } UIViewController* RootViewControllerUnityBannerView() { return ((UnityAppController *)[UIApplication sharedApplication].delegate).rootViewController; } - (id)init { self = [super init]; _tabletBanner = YES; [self reinitAppodealBannerView]; return self; } - (void)setTabletBanner:(BOOL)value { _tabletBanner = value; [self reinitAppodealBannerView]; } - (void)reinitAppodealBannerView { BOOL tabletOrPhoneSize = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && self.tabletBanner; CGSize size = tabletOrPhoneSize ? kAPDAdSize728x90 : kAPDAdSize320x50; self.bannerView = [[APDBannerView alloc] initWithSize:size]; self.onScreen = NO; } - (void)setSharedBannerFrame:(CGFloat)XAxis YAxis:(CGFloat)YAxis { UIViewAutoresizing mask = UIViewAutoresizingNone; UIView *superView = RootViewControllerUnityBannerView().view; CGSize superviewSize = RootViewControllerUnityBannerView().view.bounds.size; CGFloat screenScale = [[UIScreen mainScreen] scale]; CGFloat bannerHeight = self.bannerView.frame.size.height; CGFloat bannerWidth = self.bannerView.frame.size.width; CGFloat xOffset = .0f; CGFloat yOffset = .0f; // Calculate X offset if (XAxis == BANNER_X_POSITION_SMART) { //Smart banners mask |= UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; self.bannerView.usesSmartSizing = YES; bannerWidth = superviewSize.width; } else if (XAxis == BANNER_X_POSITION_LEFT) { //Left mask |= UIViewAutoresizingFlexibleRightMargin; } else if (XAxis == BANNER_X_POSITION_RIGHT) { //Right mask |= UIViewAutoresizingFlexibleLeftMargin; xOffset = superviewSize.width - bannerWidth; } else if (XAxis == BANNER_X_POSITION_CENTER) { //Center xOffset = (superviewSize.width - bannerWidth) / 2; mask |= UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; } else if (XAxis / screenScale > superviewSize.width - bannerWidth) { // User defined offset more than screen width NSLog(@"[Appodeal Banner view][error] Banner view x offset cannot be more than Screen width - actual banner width"); xOffset = superviewSize.width - bannerWidth; mask |= UIViewAutoresizingFlexibleLeftMargin; } else if (XAxis < -4) { NSLog(@"[Appodeal Banner view][error] Banner view x offset cannot be less than 0"); xOffset = 0; } else { mask |= UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; xOffset = XAxis / screenScale; } // Calculate Y offset if (YAxis == BANNER_Y_POSITION_TOP) { mask |= UIViewAutoresizingFlexibleBottomMargin; if (@available(iOS 11.0, *)) { yOffset = superView.safeAreaInsets.top; } } else if (YAxis == BANNER_Y_POSITION_BOTTOM) { mask |= UIViewAutoresizingFlexibleTopMargin; if (@available(iOS 11.0, *)) { yOffset = superviewSize.height - bannerHeight - superView.safeAreaInsets.bottom; } else { yOffset = superviewSize.height - bannerHeight; } } else if (YAxis / screenScale > superviewSize.height - bannerHeight) { // User defined offset more than banner width NSLog(@"[Appodeal Banner view][error] Banner view y offset cannot be more than Screen height - actual banner height"); yOffset = superviewSize.height - bannerHeight; mask |= UIViewAutoresizingFlexibleTopMargin; } else if (YAxis < -2) { NSLog(@"[Appodeal Banner view][error] Banner view y offset cannot be less than 0"); yOffset = 0; } else if (YAxis == .0f) { // All good mask |= UIViewAutoresizingFlexibleBottomMargin; } else { yOffset = YAxis / screenScale; mask |= UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; } NSLog(@"Creating banner frame with parameters: xOffset = %f, yOffset = %f", xOffset, yOffset); CGRect bannerRect = CGRectMake(xOffset, yOffset, bannerWidth, bannerHeight); [self.bannerView setAutoresizingMask:mask]; [self.bannerView setFrame:bannerRect]; [self.bannerView layoutSubviews]; } - (void)showBannerView:(UIViewController*)rootViewController XAxis:(CGFloat)XAxis YAxis:(CGFloat)YAxis placement:(NSString*)placement { [self.bannerView removeFromSuperview]; self.bannerView.rootViewController = rootViewController; self.bannerView.placement = placement; [rootViewController.view addSubview:self.bannerView]; [rootViewController.view bringSubviewToFront:self.bannerView]; [self setSharedBannerFrame:XAxis YAxis:YAxis]; self.onScreen = YES; [self.bannerView loadAd]; } - (void)hideBannerView { if(self.bannerView) { [self.bannerView removeFromSuperview]; self.onScreen = NO; } } - (void)setupTouchProcessing { if (self.bannerView) { UnityDropViewTouchProcessing(self.bannerView); UnitySetViewTouchProcessing(self.bannerView, touchesTransformedToUnityViewCoords); } } @end