154 lines
5.8 KiB
Objective-C
154 lines
5.8 KiB
Objective-C
#if defined(__has_include) && __has_include("UnityAppController.h")
|
|
#import "UnityAppController.h"
|
|
#else
|
|
#import "EmptyUnityAppController.h"
|
|
#endif
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#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
|