- worked on google ads.
- Removed the fullscreen button from jwplayerviewcontroller. - removed picuture in picutre - removed the laguage button - added skin styling for jwplayer
This commit is contained in:
@@ -112,7 +112,6 @@
|
||||
527AC6FE2C173A5100434FB7 /* SongListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 527AC6FC2C173A5100434FB7 /* SongListCell.xib */; };
|
||||
527AC7012C182DCE00434FB7 /* TimeStringToSeconds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */; };
|
||||
5282DB292C92D73B00465BA1 /* GoogleInteractiveMediaAds in Frameworks */ = {isa = PBXBuildFile; productRef = 5282DB282C92D73B00465BA1 /* GoogleInteractiveMediaAds */; };
|
||||
5282DB2C2C9816C600465BA1 /* WOKA.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5282DB2A2C9816C600465BA1 /* WOKA.xcdatamodeld */; };
|
||||
5282DB2F2C981EAD00465BA1 /* AdReusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5282DB2E2C981EAD00465BA1 /* AdReusable.swift */; };
|
||||
528BEF602C2C372900FFDAB8 /* ContinueWatchingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */; };
|
||||
528E5F1B2C24531200E33E4E /* SeasonListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */; };
|
||||
@@ -363,6 +362,7 @@
|
||||
9CDAEB142C54132E00890C47 /* CheckEddDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB132C54132E00890C47 /* CheckEddDM.swift */; };
|
||||
9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC343B2BDBBC6B00093089 /* SelectAgeVC.swift */; };
|
||||
9CDCE1452BDB9B9A003FEF11 /* OnBoardMainSound.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 9CDCE1442BDB9B9A003FEF11 /* OnBoardMainSound.m4a */; };
|
||||
9CE306B22C9961E0008EF78B /* WOKA.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 9CE306B02C9961E0008EF78B /* WOKA.xcdatamodeld */; };
|
||||
9CF6980B2C89A324006007EF /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 9CF6980A2C89A324006007EF /* Lottie */; };
|
||||
9CF6980F2C8AFFBF006007EF /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 9CF6980E2C8AFFBF006007EF /* SDWebImage */; };
|
||||
/* End PBXBuildFile section */
|
||||
@@ -518,7 +518,6 @@
|
||||
527AC6FB2C173A5100434FB7 /* SongListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongListCell.swift; sourceTree = "<group>"; };
|
||||
527AC6FC2C173A5100434FB7 /* SongListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongListCell.xib; sourceTree = "<group>"; };
|
||||
527AC7002C182DCE00434FB7 /* TimeStringToSeconds.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeStringToSeconds.swift; sourceTree = "<group>"; };
|
||||
5282DB2B2C9816C600465BA1 /* WOKA.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WOKA.xcdatamodel; sourceTree = "<group>"; };
|
||||
5282DB2E2C981EAD00465BA1 /* AdReusable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdReusable.swift; sourceTree = "<group>"; };
|
||||
528BEF5F2C2C372900FFDAB8 /* ContinueWatchingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContinueWatchingVC.swift; sourceTree = "<group>"; };
|
||||
528E5F1A2C24531200E33E4E /* SeasonListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonListingDM.swift; sourceTree = "<group>"; };
|
||||
@@ -761,6 +760,7 @@
|
||||
9CDCE1412BDB94BA003FEF11 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Main.strings; sourceTree = "<group>"; };
|
||||
9CDCE1422BDB94BD003FEF11 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = "<group>"; };
|
||||
9CDCE1442BDB9B9A003FEF11 /* OnBoardMainSound.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = OnBoardMainSound.m4a; sourceTree = "<group>"; };
|
||||
9CE306B12C9961E0008EF78B /* WOKA.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WOKA.xcdatamodel; sourceTree = "<group>"; };
|
||||
C83A2BA3B8F575DC890CC5DD /* Pods-WOKA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WOKA.debug.xcconfig"; path = "Target Support Files/Pods-WOKA/Pods-WOKA.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@@ -972,7 +972,7 @@
|
||||
9C535DC82C00C34000DA6DCD /* Theme */,
|
||||
52DAC6462C21761700E2F85B /* WebSeries */,
|
||||
9C834ED92C1C20EC00B29A9C /* WOKA.entitlements */,
|
||||
5282DB2A2C9816C600465BA1 /* WOKA.xcdatamodeld */,
|
||||
9CE306B02C9961E0008EF78B /* WOKA.xcdatamodeld */,
|
||||
52ACC1292C610EC900791528 /* PersistentStorage.swift */,
|
||||
);
|
||||
path = WOKA;
|
||||
@@ -2383,7 +2383,6 @@
|
||||
52B8D4DC2C04A25E00ED65F3 /* Delegate.swift in Sources */,
|
||||
52CA28FC2BE11A0400708B49 /* UserIntrestVM.swift in Sources */,
|
||||
52B8D4DB2C04A25E00ED65F3 /* TransitionContext.swift in Sources */,
|
||||
5282DB2C2C9816C600465BA1 /* WOKA.xcdatamodeld in Sources */,
|
||||
9C27E1602BDB6ECA00EC1DA9 /* UserDefaultsStruct.swift in Sources */,
|
||||
52A3F6AD2BECC0340000BB0B /* TypeAlias.swift in Sources */,
|
||||
52D6A24C2C21B43300145908 /* WebSeriesCell.swift in Sources */,
|
||||
@@ -2404,6 +2403,7 @@
|
||||
9C7939172C0F23E900F5D6E6 /* LinkTypeEnum.swift in Sources */,
|
||||
9CDAEB122C53F12800890C47 /* UIView.swift in Sources */,
|
||||
523ED2622BDA2BC700CFED02 /* SplashVC.swift in Sources */,
|
||||
9CE306B22C9961E0008EF78B /* WOKA.xcdatamodeld in Sources */,
|
||||
9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */,
|
||||
52A6DCAC2C4E5A1100F63C51 /* ShopCategoryVC.swift in Sources */,
|
||||
52BBFCB22C52730C00F7D0D1 /* AddressListVC.swift in Sources */,
|
||||
@@ -2873,7 +2873,7 @@
|
||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard;
|
||||
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||
INFOPLIST_KEY_UIStatusBarHidden = NO;
|
||||
INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
|
||||
INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDefault;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||
INFOPLIST_KEY_UIUserInterfaceStyle = Light;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
@@ -2916,7 +2916,7 @@
|
||||
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard;
|
||||
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||
INFOPLIST_KEY_UIStatusBarHidden = NO;
|
||||
INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
|
||||
INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDefault;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||
INFOPLIST_KEY_UIUserInterfaceStyle = Light;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
@@ -3237,14 +3237,13 @@
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
|
||||
/* Begin XCVersionGroup section */
|
||||
5282DB2A2C9816C600465BA1 /* WOKA.xcdatamodeld */ = {
|
||||
9CE306B02C9961E0008EF78B /* WOKA.xcdatamodeld */ = {
|
||||
isa = XCVersionGroup;
|
||||
children = (
|
||||
5282DB2B2C9816C600465BA1 /* WOKA.xcdatamodel */,
|
||||
9CE306B12C9961E0008EF78B /* WOKA.xcdatamodel */,
|
||||
);
|
||||
currentVersion = 5282DB2B2C9816C600465BA1 /* WOKA.xcdatamodel */;
|
||||
name = WOKA.xcdatamodeld;
|
||||
path = /Users/macbookpro/Desktop/WOKA/WOKA/WOKA.xcdatamodeld;
|
||||
currentVersion = 9CE306B12C9961E0008EF78B /* WOKA.xcdatamodel */;
|
||||
path = WOKA.xcdatamodeld;
|
||||
sourceTree = "<group>";
|
||||
versionGroupType = wrapper.xcdatamodel;
|
||||
};
|
||||
|
||||
@@ -99,6 +99,8 @@ class BadgeBarBtn {
|
||||
badgeLabel.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 10)
|
||||
badgeLabel.textAlignment = .center
|
||||
badgeLabel.text = text
|
||||
|
||||
button.addShadowAndCorner(radius: button.frame.width / 2, shadowColor: .darkGray, shadowOpacity: 0.5, shadowOffset: CGSize(width: 0, height: 0.8), shadowRadius: 6)
|
||||
|
||||
// Add the badge label to the button if not already added
|
||||
if badgeLabel.superview != button {
|
||||
|
||||
@@ -35,5 +35,11 @@ extension K{
|
||||
Username selected from forgot username shall be stored here
|
||||
*/
|
||||
static var selectedUsername : String? = nil
|
||||
|
||||
/*
|
||||
this will handle ad timing for games
|
||||
*/
|
||||
static var adTimeStamp : Date? = nil
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,14 @@ extension K{
|
||||
|
||||
static let karaoke = "ca-app-pub-3940256099942544/2934735716"
|
||||
static let audioBooks = "ca-app-pub-3940256099942544/2934735716"
|
||||
|
||||
|
||||
static let games = "ca-app-pub-3940256099942544/2934735716"
|
||||
static let gamesDetailsInterStial = "ca-app-pub-5699008063638916/8126400123"
|
||||
// static let themeTwo = "ca-app-pub-3940256099942544/2934735716"
|
||||
static let themeTwo = "ca-app-pub-5699008063638916/1393141241"
|
||||
|
||||
static let splashBanner1 = "ca-app-pub-5699008063638916/1393141241"
|
||||
static let splashBanner2 = "ca-app-pub-5699008063638916/1393141241"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import GoogleMobileAds
|
||||
import Alamofire
|
||||
|
||||
class GamesDetailVC: UIViewController {
|
||||
|
||||
@@ -35,11 +37,16 @@ class GamesDetailVC: UIViewController {
|
||||
var btnTapped : btnTappedBlock?
|
||||
var reloadType : FavCellCLick?
|
||||
|
||||
private var interstitial: GADInterstitialAd?
|
||||
private var rewardedAd: GADRewardedAd?
|
||||
|
||||
let reachability = NetworkReachabilityManager()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
initView()
|
||||
tapHandler()
|
||||
|
||||
setupAds()
|
||||
}
|
||||
|
||||
@objc func handleTap(_ gesture: UITapGestureRecognizer) {
|
||||
@@ -225,6 +232,70 @@ class GamesDetailVC: UIViewController {
|
||||
PersistentStorage.shared.addGamesCount(postID: postID)
|
||||
}
|
||||
|
||||
/*
|
||||
check ad timestamp from gvar
|
||||
show ads if the saved timestamp time and current time has diffrenece of 30 minutes
|
||||
*/
|
||||
if let timeStamp = K.GVar.adTimeStamp{
|
||||
/*
|
||||
check if timestamp difference is equal and greater than 30 minutes i.e 1800 seconds
|
||||
*/
|
||||
let duration = DateFormatterLib.dateDifferenceINT(date1: timeStamp, date2: Date())
|
||||
print(duration)
|
||||
|
||||
if duration <= 1800{
|
||||
// dont show ads navigate to webview
|
||||
navigateToGamesWebView()
|
||||
}else{
|
||||
//show ads & reset timestamp to current time
|
||||
K.GVar.adTimeStamp = Date()
|
||||
|
||||
guard let interstitial = interstitial else {
|
||||
// if ad doesnt loads make sure to make adtimestamp nil, and let user navigate to games
|
||||
K.GVar.adTimeStamp = nil
|
||||
navigateToGamesWebView()
|
||||
return print("Ad wasn't ready.")
|
||||
}
|
||||
|
||||
// The UIViewController parameter is an optional.
|
||||
interstitial.present(fromRootViewController: nil)
|
||||
}
|
||||
}else{
|
||||
/* assing date if it is nil and play the ad.
|
||||
also it means its the first time show the interstial ad.
|
||||
*/
|
||||
K.GVar.adTimeStamp = Date()
|
||||
|
||||
guard let interstitial = interstitial else {
|
||||
// if ad doesnt loads make sure to make adtimestamp nil, and let user navigate to games
|
||||
K.GVar.adTimeStamp = nil
|
||||
navigateToGamesWebView()
|
||||
return print("Ad wasn't ready.")
|
||||
}
|
||||
|
||||
// The UIViewController parameter is an optional.
|
||||
interstitial.present(fromRootViewController: nil)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private func setupAds(){
|
||||
Task {
|
||||
do {
|
||||
interstitial = try await GADInterstitialAd.load(
|
||||
withAdUnitID: K.GoogleAdIDs.gamesDetailsInterStial, request: GADRequest())
|
||||
interstitial?.fullScreenContentDelegate = self
|
||||
} catch {
|
||||
if reachability?.isReachable == true{
|
||||
setupAds()
|
||||
}
|
||||
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func navigateToGamesWebView(){
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesWebViewVC) as! GamesWebViewVC
|
||||
vcPush.url = self.gameData?.gameURL
|
||||
@@ -247,3 +318,23 @@ class GamesDetailVC: UIViewController {
|
||||
self.dismiss(animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
extension GamesDetailVC : GADFullScreenContentDelegate{
|
||||
/// Tells the delegate that the ad failed to present full screen content.
|
||||
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
|
||||
print("Ad did fail to present full screen content.")
|
||||
}
|
||||
|
||||
/// Tells the delegate that the ad will present full screen content.
|
||||
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
|
||||
print("Ad will present full screen content.")
|
||||
}
|
||||
|
||||
/// Tells the delegate that the ad dismissed full screen content.
|
||||
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
|
||||
print("Ad did dismiss full screen content.")
|
||||
self.navigateToGamesWebView()
|
||||
//setup ads again and wait for the timestamp 30 minutes
|
||||
self.setupAds()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import GoogleMobileAds
|
||||
|
||||
class GamesListVC: UIViewController {
|
||||
|
||||
@@ -26,10 +25,7 @@ class GamesListVC: UIViewController {
|
||||
@IBOutlet weak var loadMoreActivityIndicator: UIActivityIndicatorView!
|
||||
|
||||
var vm = GamesListVM()
|
||||
|
||||
private var interstitial: GADInterstitialAd?
|
||||
private var rewardedAd: GADRewardedAd?
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
vm.vc = self
|
||||
@@ -39,19 +35,7 @@ class GamesListVC: UIViewController {
|
||||
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
|
||||
navigationController?.navigationBar.shadowImage = UIImage()
|
||||
|
||||
Task {
|
||||
do {
|
||||
interstitial = try await GADInterstitialAd.load(
|
||||
withAdUnitID: "ca-app-pub-5699008063638916/8126400123", request: GADRequest())
|
||||
interstitial?.fullScreenContentDelegate = self
|
||||
|
||||
rewardedAd = try await GADRewardedAd.load(
|
||||
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
|
||||
rewardedAd?.fullScreenContentDelegate = self
|
||||
} catch {
|
||||
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
@@ -189,40 +173,7 @@ extension GamesListVC : TableViewSRC{
|
||||
if let postID = data.id{
|
||||
PersistentStorage.shared.addGamesCount(postID: postID)
|
||||
}
|
||||
|
||||
/*
|
||||
This is only for test
|
||||
*/
|
||||
if data.title == "WOKA Ludo"{
|
||||
// guard let interstitial = interstitial else {
|
||||
// return print("Ad wasn't ready.")
|
||||
// }
|
||||
//
|
||||
// // The UIViewController parameter is an optional.
|
||||
// interstitial.present(fromRootViewController: nil)
|
||||
guard let rewardedAd = rewardedAd else {
|
||||
return print("Ad wasn't ready.")
|
||||
}
|
||||
|
||||
// The UIViewController parameter is an optional.
|
||||
rewardedAd.present(fromRootViewController: nil) {
|
||||
let reward = rewardedAd.adReward
|
||||
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
|
||||
// TODO: Reward the user.
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if data.title == "WOKA Carrom"{
|
||||
guard let interstitial = interstitial else {
|
||||
return print("Ad wasn't ready.")
|
||||
}
|
||||
|
||||
// The UIViewController parameter is an optional.
|
||||
interstitial.present(fromRootViewController: nil)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesDetailVC) as! GamesDetailVC
|
||||
@@ -296,45 +247,3 @@ extension GamesListVC: UIScrollViewDelegate {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extension GamesListVC : GADFullScreenContentDelegate{
|
||||
/// Tells the delegate that the ad failed to present full screen content.
|
||||
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
|
||||
print("Ad did fail to present full screen content.")
|
||||
}
|
||||
|
||||
/// Tells the delegate that the ad will present full screen content.
|
||||
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
|
||||
print("Ad will present full screen content.")
|
||||
}
|
||||
|
||||
/// Tells the delegate that the ad dismissed full screen content.
|
||||
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
|
||||
print("Ad did dismiss full screen content.")
|
||||
let data = vm.gameData[vm.indexToLoad]
|
||||
|
||||
let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil)
|
||||
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesDetailVC) as! GamesDetailVC
|
||||
vcPush.modalPresentationStyle = .overCurrentContext
|
||||
vcPush.modalTransitionStyle = .crossDissolve
|
||||
vcPush.gameIndex = vm.indexToLoad
|
||||
vcPush.gameData = data
|
||||
vcPush.delegate = self
|
||||
self.present(vcPush, animated: true)
|
||||
|
||||
Task {
|
||||
do {
|
||||
interstitial = try await GADInterstitialAd.load(
|
||||
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
|
||||
interstitial?.fullScreenContentDelegate = self
|
||||
|
||||
rewardedAd = try await GADRewardedAd.load(
|
||||
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
|
||||
rewardedAd?.fullScreenContentDelegate = self
|
||||
} catch {
|
||||
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,19 +42,19 @@ class GamesWebViewVC: UIViewController, WKNavigationDelegate,UIGestureRecognizer
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
guard let self else{return}
|
||||
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBannerView, in: adView, adUnitID: K.GoogleAdIDs.themeTwo, viewController: self)
|
||||
|
||||
if let orientation, orientation == .landscape{
|
||||
|
||||
|
||||
|
||||
if let orientation, orientation == .landscape{
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
guard let self else{return}
|
||||
appDelegate.deviceOrientation = .landscapeRight
|
||||
let value = UIInterfaceOrientation.landscapeRight.rawValue
|
||||
UIDevice.current.setValue(value, forKey: "orientation")
|
||||
// rotateToLandsScapeDevice()
|
||||
}
|
||||
}else{
|
||||
showAds()
|
||||
}
|
||||
|
||||
|
||||
guard let url else{return}
|
||||
|
||||
@@ -125,6 +125,15 @@ class GamesWebViewVC: UIViewController, WKNavigationDelegate,UIGestureRecognizer
|
||||
self.present(vcPush, animated: true)
|
||||
}
|
||||
|
||||
// MARK: - SetupAds
|
||||
|
||||
private func showAds(){
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: {[weak self] in
|
||||
guard let self else{return}
|
||||
AdReusable.sharedInstance.setupBannerAd(bannerView: self.bottomBannerView, in: adView, adUnitID: K.GoogleAdIDs.themeTwo, viewController: self)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// MARK: - App LifeCycle HAndler
|
||||
|
||||
@@ -174,11 +183,12 @@ extension GamesWebViewVC : GADBannerViewDelegate{
|
||||
|
||||
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
|
||||
print("bannerViewDidReceiveAd")
|
||||
self.adView.isHidden = false
|
||||
bannerView.alpha = 0
|
||||
bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1)
|
||||
UIView.animate(withDuration: 1, animations: {
|
||||
UIView.animate(withDuration: 0.3, animations: {
|
||||
bannerView.alpha = 1
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
@@ -584,32 +584,36 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UBq-Ug-nVj">
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Pb3-kR-MLR">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<subviews>
|
||||
<wkWebView contentMode="scaleToFill" allowsLinkPreview="NO" translatesAutoresizingMaskIntoConstraints="NO" id="k9t-dv-nhb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="744"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<wkWebViewConfiguration key="configuration" allowsAirPlayForMediaPlayback="NO" allowsPictureInPictureMediaPlayback="NO">
|
||||
<dataDetectorTypes key="dataDetectorTypes" none="YES"/>
|
||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
||||
<wkPreferences key="preferences" javaScriptCanOpenWindowsAutomatically="YES"/>
|
||||
</wkWebViewConfiguration>
|
||||
</wkWebView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UBq-Ug-nVj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="776"/>
|
||||
<subviews>
|
||||
<wkWebView contentMode="scaleToFill" allowsLinkPreview="NO" translatesAutoresizingMaskIntoConstraints="NO" id="k9t-dv-nhb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="774"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<wkWebViewConfiguration key="configuration" allowsAirPlayForMediaPlayback="NO" allowsPictureInPictureMediaPlayback="NO">
|
||||
<dataDetectorTypes key="dataDetectorTypes" none="YES"/>
|
||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
||||
<wkPreferences key="preferences" javaScriptCanOpenWindowsAutomatically="YES"/>
|
||||
</wkWebViewConfiguration>
|
||||
</wkWebView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="k9t-dv-nhb" secondAttribute="trailing" id="280-OD-igM"/>
|
||||
<constraint firstItem="k9t-dv-nhb" firstAttribute="top" secondItem="UBq-Ug-nVj" secondAttribute="top" id="OLz-JE-Ule"/>
|
||||
<constraint firstAttribute="bottom" secondItem="k9t-dv-nhb" secondAttribute="bottom" constant="2" id="Tbp-Kk-zN4"/>
|
||||
<constraint firstItem="k9t-dv-nhb" firstAttribute="leading" secondItem="UBq-Ug-nVj" secondAttribute="leading" id="XhR-Si-hmd"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Kme-E0-ysm">
|
||||
<rect key="frame" x="0.0" y="746" width="414" height="150"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<rect key="frame" x="0.0" y="776" width="414" height="120"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="k9t-dv-nhb" secondAttribute="trailing" id="280-OD-igM"/>
|
||||
<constraint firstItem="k9t-dv-nhb" firstAttribute="top" secondItem="UBq-Ug-nVj" secondAttribute="top" id="OLz-JE-Ule"/>
|
||||
<constraint firstItem="k9t-dv-nhb" firstAttribute="leading" secondItem="UBq-Ug-nVj" secondAttribute="leading" id="XhR-Si-hmd"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Kme-E0-ysm" secondAttribute="bottom" id="jmT-2e-teQ"/>
|
||||
<constraint firstItem="Kme-E0-ysm" firstAttribute="top" secondItem="k9t-dv-nhb" secondAttribute="bottom" constant="2" id="uKZ-yF-y2X"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</stackView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7Qp-yb-i2l">
|
||||
<rect key="frame" x="7" y="58" width="35" height="35"/>
|
||||
<color key="backgroundColor" name="ImageDarkBlue"/>
|
||||
@@ -633,15 +637,13 @@
|
||||
<viewLayoutGuide key="safeArea" id="UAe-my-8xP"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="UBq-Ug-nVj" firstAttribute="top" secondItem="8Dy-BS-4tC" secondAttribute="top" id="9CL-yd-6Hq"/>
|
||||
<constraint firstItem="UBq-Ug-nVj" firstAttribute="leading" secondItem="UAe-my-8xP" secondAttribute="leading" id="9hb-Yg-ACx"/>
|
||||
<constraint firstItem="Pb3-kR-MLR" firstAttribute="top" secondItem="8Dy-BS-4tC" secondAttribute="top" id="BrK-C3-wzM"/>
|
||||
<constraint firstItem="Pb3-kR-MLR" firstAttribute="trailing" secondItem="UAe-my-8xP" secondAttribute="trailing" id="C3D-4e-fEs"/>
|
||||
<constraint firstItem="7Qp-yb-i2l" firstAttribute="top" secondItem="UAe-my-8xP" secondAttribute="top" constant="10" id="Oxh-34-kbI"/>
|
||||
<constraint firstItem="Kme-E0-ysm" firstAttribute="leading" secondItem="UAe-my-8xP" secondAttribute="leading" id="VYI-NP-6PJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="UBq-Ug-nVj" secondAttribute="bottom" id="lOx-rP-1sz"/>
|
||||
<constraint firstItem="Pb3-kR-MLR" firstAttribute="leading" secondItem="UAe-my-8xP" secondAttribute="leading" id="d3v-BG-rEx"/>
|
||||
<constraint firstItem="Kme-E0-ysm" firstAttribute="height" secondItem="8Dy-BS-4tC" secondAttribute="height" multiplier="0.133929" id="icB-Y9-WUz"/>
|
||||
<constraint firstItem="7Qp-yb-i2l" firstAttribute="leading" secondItem="UAe-my-8xP" secondAttribute="leading" constant="7" id="otO-uz-8gX"/>
|
||||
<constraint firstItem="UAe-my-8xP" firstAttribute="trailing" secondItem="Kme-E0-ysm" secondAttribute="trailing" id="vVM-pz-oEN"/>
|
||||
<constraint firstItem="Kme-E0-ysm" firstAttribute="height" secondItem="8Dy-BS-4tC" secondAttribute="height" multiplier="0.167411" id="w7p-w4-jTu"/>
|
||||
<constraint firstItem="UBq-Ug-nVj" firstAttribute="trailing" secondItem="UAe-my-8xP" secondAttribute="trailing" id="xcS-Cj-AOE"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Pb3-kR-MLR" secondAttribute="bottom" id="phu-wl-ju8"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
|
||||
@@ -16,6 +16,7 @@ class GamesListVM{
|
||||
var pageNo = 0
|
||||
var maxHeaderHeight = 0.0
|
||||
|
||||
|
||||
func initView(){
|
||||
setupCell()
|
||||
vc.scrollView.indicatorStyle = .white // or .white
|
||||
|
||||
@@ -153,9 +153,9 @@ class JWPlayerManager {
|
||||
|
||||
// Create an ad break for 30% into the video
|
||||
let adBreakBuilder1 = JWAdBreakBuilder()
|
||||
// .offset(.midroll(percent: 50))
|
||||
.offset(.from(string: "20%")!)
|
||||
.tags([URL(string: generateAdTagUrl())!])
|
||||
.offset(.midroll(percent: 20))
|
||||
// .offset(.from(string: "20%")!)
|
||||
.tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250,728x90&gdfp_req=1&output=vast4&unviewed_position_start=1&env=vp&impl=s&correlator=7898879")!])
|
||||
|
||||
guard let adBreak1 = try? adBreakBuilder1.build() else {
|
||||
print("Ad error 2")
|
||||
@@ -164,9 +164,9 @@ class JWPlayerManager {
|
||||
}
|
||||
|
||||
let adBreakBuilder3 = JWAdBreakBuilder()
|
||||
// .offset(.midroll(percent: 50))
|
||||
.offset(.from(string: "50%")!)
|
||||
.tags([URL(string: generateAdTagUrl())!])
|
||||
.offset(.midroll(percent: 50))
|
||||
// .offset(.from(string: "50%")!)
|
||||
.tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=60")!])
|
||||
|
||||
guard let adBreak3 = try? adBreakBuilder3.build() else {
|
||||
print("Ad error 2")
|
||||
@@ -174,6 +174,17 @@ class JWPlayerManager {
|
||||
return
|
||||
}
|
||||
|
||||
let adBreakBuilder4 = JWAdBreakBuilder()
|
||||
.offset(.midroll(percent: 80))
|
||||
// .offset(.from(string: "50%")!)
|
||||
.tags([URL(string: "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=90")!])
|
||||
|
||||
guard let adBreak4 = try? adBreakBuilder4.build() else {
|
||||
print("Ad error 2")
|
||||
// Handle build error
|
||||
return
|
||||
}
|
||||
|
||||
// Create an ad break for 30% into the video
|
||||
// let adBreakBuilder3 = JWAdBreakBuilder()
|
||||
// .offset(.postroll())
|
||||
@@ -185,7 +196,7 @@ class JWPlayerManager {
|
||||
// }
|
||||
|
||||
let adConfigBuilder = JWImaAdvertisingConfigBuilder()
|
||||
.schedule([adBreak1,adBreak3])
|
||||
.schedule([adBreak1,adBreak3, adBreak4])
|
||||
guard let adConfig = try? adConfigBuilder.build() else {
|
||||
|
||||
// Handle build error
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="v6B-41-NJx">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="v6B-41-NJx">
|
||||
<device id="retina6_72" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
@@ -27,17 +27,17 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="OYq-ie-PCX">
|
||||
<rect key="frame" x="0.0" y="0.0" width="430" height="932"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="430" height="926"/>
|
||||
</imageView>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="0T1-bR-Cvy">
|
||||
<rect key="frame" x="145" y="452.33333333333331" width="140" height="52.333333333333314"/>
|
||||
<rect key="frame" x="145" y="449.33333333333331" width="140" height="52.333333333333314"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="140" id="5Om-xJ-yBC"/>
|
||||
<constraint firstAttribute="width" secondItem="0T1-bR-Cvy" secondAttribute="height" multiplier="8:3" id="IPk-eZ-y1g"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="KHl-9W-vAe">
|
||||
<rect key="frame" x="30" y="584.66666666666663" width="370" height="60"/>
|
||||
<rect key="frame" x="30" y="581.66666666666663" width="370" height="60"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XdB-NB-osA">
|
||||
<rect key="frame" x="0.0" y="0.0" width="170" height="60"/>
|
||||
@@ -65,10 +65,10 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b8h-6Z-OJr">
|
||||
<rect key="frame" x="197.66666666666666" y="853" width="35" height="35"/>
|
||||
<rect key="frame" x="198.66666666666666" y="849.33333333333337" width="32.666666666666657" height="32.666666666666629"/>
|
||||
<subviews>
|
||||
<activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" style="medium" translatesAutoresizingMaskIntoConstraints="NO" id="WFZ-SB-V1t">
|
||||
<rect key="frame" x="0.0" y="0.0" width="35" height="35"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="32.666666666666664" height="32.666666666666664"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="35" id="Hy3-fe-fxq"/>
|
||||
<constraint firstAttribute="width" secondItem="WFZ-SB-V1t" secondAttribute="height" multiplier="1:1" id="wIx-4l-tWy"/>
|
||||
@@ -76,7 +76,7 @@
|
||||
<color key="color" name="TextDarkBlue"/>
|
||||
</activityIndicatorView>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="T63-z7-Ddb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="0.0" height="35"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="0.0" height="32.666666666666664"/>
|
||||
<color key="tintColor" name="TextDarkBlue"/>
|
||||
<state key="normal" title="Button"/>
|
||||
<buttonConfiguration key="configuration" style="plain">
|
||||
@@ -94,26 +94,45 @@
|
||||
</button>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="g73-qy-DDl">
|
||||
<rect key="frame" x="0.0" y="192.66666666666663" width="430" height="129.33333333333337"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OED-kP-BRQ">
|
||||
<rect key="frame" x="0.0" y="671" width="430" height="129.33333333333337"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="OED-kP-BRQ" firstAttribute="trailing" secondItem="6Tk-OE-BBY" secondAttribute="trailing" id="36m-cp-6HC"/>
|
||||
<constraint firstItem="OED-kP-BRQ" firstAttribute="top" secondItem="KHl-9W-vAe" secondAttribute="bottom" constant="29.333333333333371" id="3nK-jK-iic"/>
|
||||
<constraint firstItem="6Tk-OE-BBY" firstAttribute="bottom" secondItem="b8h-6Z-OJr" secondAttribute="bottom" constant="10" id="8Oc-WY-2aa"/>
|
||||
<constraint firstItem="KHl-9W-vAe" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" constant="30" id="E1n-Eh-P1N"/>
|
||||
<constraint firstItem="b8h-6Z-OJr" firstAttribute="top" secondItem="OED-kP-BRQ" secondAttribute="bottom" constant="49" id="G7k-I4-r6b"/>
|
||||
<constraint firstAttribute="bottom" secondItem="OYq-ie-PCX" secondAttribute="bottom" id="JoJ-CY-PKV"/>
|
||||
<constraint firstItem="OYq-ie-PCX" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="QIp-RX-W6O"/>
|
||||
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="KHl-9W-vAe" secondAttribute="trailing" constant="30" id="WgR-cO-AqS"/>
|
||||
<constraint firstItem="0T1-bR-Cvy" firstAttribute="centerX" secondItem="OYq-ie-PCX" secondAttribute="centerX" id="crp-Vn-eE2"/>
|
||||
<constraint firstItem="g73-qy-DDl" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="eNL-3u-HD8"/>
|
||||
<constraint firstAttribute="trailing" secondItem="OYq-ie-PCX" secondAttribute="trailing" id="eul-m2-arb"/>
|
||||
<constraint firstItem="0T1-bR-Cvy" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="fdB-2S-YYe"/>
|
||||
<constraint firstItem="OED-kP-BRQ" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="gQN-yu-cfQ"/>
|
||||
<constraint firstItem="g73-qy-DDl" firstAttribute="height" secondItem="8bC-Xf-vdC" secondAttribute="height" multiplier="0.139485" id="jWc-7L-yx1"/>
|
||||
<constraint firstItem="KHl-9W-vAe" firstAttribute="top" secondItem="0T1-bR-Cvy" secondAttribute="bottom" constant="80" id="ld4-Um-qic"/>
|
||||
<constraint firstItem="OED-kP-BRQ" firstAttribute="height" secondItem="8bC-Xf-vdC" secondAttribute="height" multiplier="0.139485" id="mfK-aX-ws9"/>
|
||||
<constraint firstItem="0T1-bR-Cvy" firstAttribute="top" secondItem="g73-qy-DDl" secondAttribute="bottom" constant="127.33333333333331" id="nPO-Yx-ZpD"/>
|
||||
<constraint firstItem="b8h-6Z-OJr" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="rKT-Yg-uOY"/>
|
||||
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="g73-qy-DDl" secondAttribute="trailing" id="vft-8T-uuc"/>
|
||||
<constraint firstItem="OYq-ie-PCX" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="yVI-ZY-646"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="cMP-Th-2kL"/>
|
||||
<connections>
|
||||
<outlet property="activityIndicator" destination="WFZ-SB-V1t" id="A9T-Bi-mAd"/>
|
||||
<outlet property="adBanner1" destination="OED-kP-BRQ" id="sId-OM-NKv"/>
|
||||
<outlet property="adBanner2" destination="g73-qy-DDl" id="qHj-bU-REi"/>
|
||||
<outlet property="englishBtn" destination="XdB-NB-osA" id="eiP-q9-9TH"/>
|
||||
<outlet property="hindiBtn" destination="SYp-e1-w6s" id="mgg-al-7J8"/>
|
||||
<outlet property="languageBtnStack" destination="KHl-9W-vAe" id="ssW-dX-fxk"/>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
import UIKit
|
||||
import Lottie
|
||||
import OneSignalFramework
|
||||
import GoogleMobileAds
|
||||
|
||||
class SplashVC: UIViewController {
|
||||
|
||||
@@ -20,12 +21,25 @@ class SplashVC: UIViewController {
|
||||
@IBOutlet weak var retryBtn: UIButton!
|
||||
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
|
||||
|
||||
@IBOutlet weak var adBanner1: UIView!
|
||||
@IBOutlet weak var adBanner2: UIView!
|
||||
|
||||
var vm = SplashVM()
|
||||
|
||||
// MARK: - View Life Cycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
/*
|
||||
Show google ads with dispatch queue.
|
||||
*/
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: { [weak self] in
|
||||
guard let self else{return}
|
||||
AdReusable.sharedInstance.setupBannerAd(bannerView: vm.banner1, in: adBanner1, adUnitID: K.GoogleAdIDs.splashBanner1, viewController: self)
|
||||
AdReusable.sharedInstance.setupBannerAd(bannerView: vm.banner2, in: adBanner2, adUnitID: K.GoogleAdIDs.splashBanner2, viewController: self)
|
||||
})
|
||||
|
||||
|
||||
vm.vc = self
|
||||
vm.playSplashSound()
|
||||
animateImageScale()
|
||||
@@ -141,4 +155,37 @@ class SplashVC: UIViewController {
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Google Ad Banner Delegate
|
||||
|
||||
extension SplashVC : GADBannerViewDelegate{
|
||||
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
|
||||
print("bannerViewDidReceiveAd")
|
||||
bannerView.alpha = 0
|
||||
bannerView.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
|
||||
UIView.animate(withDuration: 0.5, animations: {
|
||||
bannerView.alpha = 1
|
||||
})
|
||||
}
|
||||
|
||||
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
|
||||
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
|
||||
}
|
||||
|
||||
func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
|
||||
print("bannerViewDidRecordImpression")
|
||||
}
|
||||
|
||||
func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
|
||||
print("bannerViewWillPresentScreen")
|
||||
}
|
||||
|
||||
func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
|
||||
print("bannerViewWillDIsmissScreen")
|
||||
}
|
||||
|
||||
func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
|
||||
print("bannerViewDidDismissScreen")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -9,13 +9,19 @@ import UIKit
|
||||
import AVFoundation
|
||||
import Alamofire
|
||||
import FirebaseAnalytics
|
||||
import GoogleMobileAds
|
||||
|
||||
class SplashVM{
|
||||
|
||||
weak var vc : SplashVC!
|
||||
var player: AVAudioPlayer?
|
||||
|
||||
var banner1 = GADBannerView()
|
||||
var banner2 = GADBannerView()
|
||||
|
||||
|
||||
func initView(){
|
||||
|
||||
if AuthFunc.shareInstance.staticURLs == nil{
|
||||
AuthFunc.shareInstance.getStaticURLs()
|
||||
}
|
||||
|
||||
@@ -15,10 +15,16 @@ class ShopListingCell: UITableViewCell {
|
||||
|
||||
@IBOutlet weak var imageHeight: NSLayoutConstraint!
|
||||
|
||||
override func prepareForReuse() {
|
||||
super.prepareForReuse()
|
||||
// Reset or reapply shadow only if needed
|
||||
shimmerEffectView.layer.shadowPath = nil
|
||||
}
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
self.backgroundColor = .clear
|
||||
// Initialization code
|
||||
shimmerEffectView.addShadowAndCorner(radius: 8, shadowColor: .darkGray, shadowOpacity: 0.6, shadowOffset: CGSize(width: 0, height: 0.5), shadowRadius: 5)
|
||||
}
|
||||
|
||||
func showShimmer(){
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
@@ -20,7 +20,7 @@
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="241" id="KGk-i7-Jjw" customClass="ShopListingCell" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="392" height="241"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
|
||||
<tableViewCellContentView key="contentView" opaque="NO" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
|
||||
<rect key="frame" x="0.0" y="0.0" width="392" height="241"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
@@ -28,10 +28,10 @@
|
||||
<rect key="frame" x="10" y="8" width="372" height="223"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" axis="vertical" distribution="fillProportionally" spacing="3" translatesAutoresizingMaskIntoConstraints="NO" id="mJf-iU-iXo">
|
||||
<rect key="frame" x="0.0" y="0.0" width="372" height="223"/>
|
||||
<rect key="frame" x="10" y="10" width="352" height="208"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WaI-mH-feh">
|
||||
<rect key="frame" x="10" y="10" width="352" height="170"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="352" height="170"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="180" id="MAu-oG-jtt"/>
|
||||
@@ -43,7 +43,7 @@
|
||||
</userDefinedRuntimeAttributes>
|
||||
</imageView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" distribution="equalSpacing" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="bNT-Ga-1cb" userLabel="TitleLikeFav">
|
||||
<rect key="frame" x="10" y="183" width="352" height="35"/>
|
||||
<rect key="frame" x="0.0" y="173" width="352" height="35"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OAi-7e-Ifq">
|
||||
<rect key="frame" x="0.0" y="7.9999999999999982" width="352" height="19.333333333333329"/>
|
||||
@@ -58,21 +58,15 @@
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<edgeInsets key="layoutMargins" top="10" left="10" bottom="5" right="10"/>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="mJf-iU-iXo" secondAttribute="trailing" id="2dr-i7-fPB"/>
|
||||
<constraint firstItem="mJf-iU-iXo" firstAttribute="top" secondItem="fIB-0u-s5x" secondAttribute="top" id="Ehl-IP-pq9"/>
|
||||
<constraint firstItem="mJf-iU-iXo" firstAttribute="leading" secondItem="fIB-0u-s5x" secondAttribute="leading" id="jaA-r1-Ep8"/>
|
||||
<constraint firstAttribute="bottom" secondItem="mJf-iU-iXo" secondAttribute="bottom" id="rqd-Uy-uyZ"/>
|
||||
<constraint firstAttribute="trailing" secondItem="mJf-iU-iXo" secondAttribute="trailing" constant="10" id="2dr-i7-fPB"/>
|
||||
<constraint firstItem="mJf-iU-iXo" firstAttribute="top" secondItem="fIB-0u-s5x" secondAttribute="top" constant="10" id="Ehl-IP-pq9"/>
|
||||
<constraint firstItem="mJf-iU-iXo" firstAttribute="leading" secondItem="fIB-0u-s5x" secondAttribute="leading" constant="10" id="jaA-r1-Ep8"/>
|
||||
<constraint firstAttribute="bottom" secondItem="mJf-iU-iXo" secondAttribute="bottom" constant="5" id="rqd-Uy-uyZ"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="5"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
|
||||
@@ -12,12 +12,19 @@ class ShopProductsCell: UICollectionViewCell {
|
||||
@IBOutlet weak var productImage: UIImageView!
|
||||
@IBOutlet weak var productTitle: UILabel!
|
||||
@IBOutlet weak var productPrice: UILabel!
|
||||
@IBOutlet weak var outerView: UIView!
|
||||
|
||||
override func prepareForReuse() {
|
||||
super.prepareForReuse()
|
||||
// Reset or reapply shadow only if needed
|
||||
outerView.layer.shadowPath = nil
|
||||
}
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
productTitle.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 13)
|
||||
productPrice.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 13)
|
||||
// Initialization code
|
||||
outerView.addShadowAndCorner(radius: 6, shadowColor: .darkGray, shadowOpacity: 0.5, shadowOffset: CGSize(width: 0, height: 0.3), shadowRadius: 3)
|
||||
}
|
||||
|
||||
func setData(data : ShopProductsListingDM.ResultData){
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
@@ -17,14 +17,14 @@
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="ShopProductsCell" customModule="WOKA" customModuleProvider="target">
|
||||
<collectionViewCell opaque="NO" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="ShopProductsCell" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="167" height="167"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
<rect key="frame" x="0.0" y="0.0" width="167" height="167"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0Zv-2V-8m6">
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0Zv-2V-8m6">
|
||||
<rect key="frame" x="5" y="5" width="157" height="157"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="jcb-xQ-0XB">
|
||||
@@ -72,11 +72,6 @@ sadasdasdasdsad</string>
|
||||
<constraint firstItem="jcb-xQ-0XB" firstAttribute="leading" secondItem="0Zv-2V-8m6" secondAttribute="leading" constant="8" id="JaZ-Dw-2aK"/>
|
||||
<constraint firstAttribute="bottom" secondItem="jcb-xQ-0XB" secondAttribute="bottom" constant="5" id="bYI-Ld-y19"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||
<integer key="value" value="10"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
</subviews>
|
||||
</view>
|
||||
@@ -89,6 +84,7 @@ sadasdasdasdsad</string>
|
||||
</constraints>
|
||||
<size key="customSize" width="167" height="167"/>
|
||||
<connections>
|
||||
<outlet property="outerView" destination="0Zv-2V-8m6" id="Fks-aB-w1P"/>
|
||||
<outlet property="productImage" destination="Qxf-XT-JWX" id="Pgy-wv-fLp"/>
|
||||
<outlet property="productPrice" destination="sNE-QZ-rn6" id="zJk-Mf-ui1"/>
|
||||
<outlet property="productTitle" destination="5VD-VF-Ean" id="JyL-aG-PFw"/>
|
||||
|
||||
@@ -59,6 +59,19 @@ class PlayerVC: JWPlayerViewController, JWPlayerViewControllerDelegate {
|
||||
self.view.bringSubviewToFront(backButton)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
|
||||
|
||||
// let skinStylingBuilder = JWPlayerSkinBuilder()
|
||||
// .buttonsColor(.blue)
|
||||
// .backgroundColor(.cyan)
|
||||
//
|
||||
// let skinStyling = try? skinStylingBuilder.build()
|
||||
// self.styling = skinStyling
|
||||
|
||||
self.setVisibility(.hidden, for: [.fullscreenButton])
|
||||
self.setVisibility(.hidden, for: [.settingsButton])
|
||||
self.setVisibility(.hidden, for: [.pictureInPictureButton])
|
||||
self.setVisibility(.hidden, for: [.languagesButton])
|
||||
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
|
||||
@@ -227,9 +227,9 @@ extension WokaFMVC : GADBannerViewDelegate{
|
||||
print("bannerViewDidReceiveAd")
|
||||
bannerView.alpha = 0
|
||||
bannerView.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1)
|
||||
UIView.animate(withDuration: 1, animations: {
|
||||
UIView.animate(withDuration: 0.3, animations: {
|
||||
bannerView.alpha = 1
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
@@ -15,7 +15,7 @@
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="SeasonCategoryCell" id="gTV-IL-0wX" customClass="SeasonCategoryCell" customModule="WOKA" customModuleProvider="target">
|
||||
<collectionViewCell opaque="NO" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="SeasonCategoryCell" id="gTV-IL-0wX" customClass="SeasonCategoryCell" customModule="WOKA" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="193" height="58"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||
|
||||
Reference in New Issue
Block a user