Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1cf2c2dde2 | ||
|
ade3e2c2bd |
@ -305,7 +305,6 @@
|
|||||||
1B056E762DDB3641007EE38D /* VPTabBarItemNormalVew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPTabBarItemNormalVew.swift; sourceTree = "<group>"; };
|
1B056E762DDB3641007EE38D /* VPTabBarItemNormalVew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPTabBarItemNormalVew.swift; sourceTree = "<group>"; };
|
||||||
1B056E782DDB365A007EE38D /* VPTabBarItemSelectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPTabBarItemSelectedView.swift; sourceTree = "<group>"; };
|
1B056E782DDB365A007EE38D /* VPTabBarItemSelectedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPTabBarItemSelectedView.swift; sourceTree = "<group>"; };
|
||||||
1B056E7A2DDB37BA007EE38D /* VPGradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPGradientView.swift; sourceTree = "<group>"; };
|
1B056E7A2DDB37BA007EE38D /* VPGradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPGradientView.swift; sourceTree = "<group>"; };
|
||||||
316330F9CC4DB54283ADC8A9 /* Pods-VideoPlayer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer.release.xcconfig"; path = "Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer.release.xcconfig"; sourceTree = "<group>"; };
|
|
||||||
34F57E87E765BF8D72A43DCA /* Pods_Veloria.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Veloria.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
34F57E87E765BF8D72A43DCA /* Pods_Veloria.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Veloria.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
831DCE145EAEF22088BB06E4 /* Pods-Veloria.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Veloria.debug.xcconfig"; path = "Target Support Files/Pods-Veloria/Pods-Veloria.debug.xcconfig"; sourceTree = "<group>"; };
|
831DCE145EAEF22088BB06E4 /* Pods-Veloria.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Veloria.debug.xcconfig"; path = "Target Support Files/Pods-Veloria/Pods-Veloria.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
AA827CC8ACC3AE70E33A0EEB /* Pods-Veloria.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Veloria.release.xcconfig"; path = "Target Support Files/Pods-Veloria/Pods-Veloria.release.xcconfig"; sourceTree = "<group>"; };
|
AA827CC8ACC3AE70E33A0EEB /* Pods-Veloria.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Veloria.release.xcconfig"; path = "Target Support Files/Pods-Veloria/Pods-Veloria.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
@ -524,7 +523,6 @@
|
|||||||
BFF5B2782DF679720044227A /* VPMoreVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMoreVideoViewController.swift; sourceTree = "<group>"; };
|
BFF5B2782DF679720044227A /* VPMoreVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMoreVideoViewController.swift; sourceTree = "<group>"; };
|
||||||
BFF5B4AE2DF6B6630044227A /* VPMutualCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMutualCollectionView.swift; sourceTree = "<group>"; };
|
BFF5B4AE2DF6B6630044227A /* VPMutualCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMutualCollectionView.swift; sourceTree = "<group>"; };
|
||||||
BFF5B6E42DF7C8580044227A /* VPEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPEmptyView.swift; sourceTree = "<group>"; };
|
BFF5B6E42DF7C8580044227A /* VPEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPEmptyView.swift; sourceTree = "<group>"; };
|
||||||
E0BDA3570E00C90877E45AA0 /* Pods-VideoPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer.debug.xcconfig"; path = "Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer.debug.xcconfig"; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@ -806,8 +804,6 @@
|
|||||||
97790501CCBF987017A55C80 /* Pods */ = {
|
97790501CCBF987017A55C80 /* Pods */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
E0BDA3570E00C90877E45AA0 /* Pods-VideoPlayer.debug.xcconfig */,
|
|
||||||
316330F9CC4DB54283ADC8A9 /* Pods-VideoPlayer.release.xcconfig */,
|
|
||||||
831DCE145EAEF22088BB06E4 /* Pods-Veloria.debug.xcconfig */,
|
831DCE145EAEF22088BB06E4 /* Pods-Veloria.debug.xcconfig */,
|
||||||
AA827CC8ACC3AE70E33A0EEB /* Pods-Veloria.release.xcconfig */,
|
AA827CC8ACC3AE70E33A0EEB /* Pods-Veloria.release.xcconfig */,
|
||||||
);
|
);
|
||||||
@ -1798,7 +1794,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Veloria/Veloria.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Veloria/Veloria.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 4;
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_TEAM = 394VH538M8;
|
DEVELOPMENT_TEAM = 394VH538M8;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = Veloria/Source/Info.plist;
|
INFOPLIST_FILE = Veloria/Source/Info.plist;
|
||||||
@ -1817,7 +1813,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.4;
|
MARKETING_VERSION = 1.0.5;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -1841,7 +1837,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Veloria/Veloria.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Veloria/Veloria.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 4;
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_TEAM = 394VH538M8;
|
DEVELOPMENT_TEAM = 394VH538M8;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = Veloria/Source/Info.plist;
|
INFOPLIST_FILE = Veloria/Source/Info.plist;
|
||||||
@ -1860,7 +1856,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.4;
|
MARKETING_VERSION = 1.0.5;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios;
|
PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import FacebookCore
|
import FacebookCore
|
||||||
|
import AdjustSdk
|
||||||
|
|
||||||
extension SceneDelegate {
|
extension SceneDelegate {
|
||||||
|
|
||||||
@ -17,30 +18,35 @@ extension SceneDelegate {
|
|||||||
|
|
||||||
//facebook
|
//facebook
|
||||||
let result = ApplicationDelegate.shared.application(UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation])
|
let result = ApplicationDelegate.shared.application(UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation])
|
||||||
|
|
||||||
if !result {
|
if !result {
|
||||||
|
if let link = ADJDeeplink(deeplink: url) {
|
||||||
|
Adjust.processDeeplink(link)
|
||||||
|
}
|
||||||
vp_handleOpenAppMessage(webpageURL: url)
|
vp_handleOpenAppMessage(webpageURL: url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
|
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
|
||||||
guard let webpageURL = userActivity.webpageURL else { return }
|
guard let webpageURL = userActivity.webpageURL else { return }
|
||||||
vp_handleOpenAppMessage(webpageURL: webpageURL)
|
let result = ApplicationDelegate.shared.application(UIApplication.shared, continue: userActivity)
|
||||||
|
|
||||||
|
if !result {
|
||||||
|
vp_handleOpenAppMessage(webpageURL: webpageURL)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension SceneDelegate {
|
extension SceneDelegate {
|
||||||
///是否有正在打开的消息
|
///是否允许打开消息(每次打开APP只允许打开一次消息)
|
||||||
static var hasOpenMessage = false
|
static var allowOpenMessage = true
|
||||||
///是否需要重试
|
///是否需要重试
|
||||||
static var isNeedRetry = false
|
static var isNeedRetry = false
|
||||||
|
|
||||||
private static var webpageURL: URL?
|
private static var webpageURL: URL?
|
||||||
|
|
||||||
func vp_handleOpenAppMessage(webpageURL: URL?) {
|
func vp_handleOpenAppMessage(webpageURL: URL?) {
|
||||||
guard VPNetworkReachabilityManager.manager.isReachable == true, //有网
|
guard VPNetworkReachabilityManager.manager.isReachable == true, //有网
|
||||||
AppDelegate.haveBeenShownAPNS, //推送弹窗
|
// AppDelegate.haveBeenShownAPNS, //推送弹窗
|
||||||
self.isOpenApp, //APP被开启
|
self.isOpenApp, //APP被开启
|
||||||
VPAppTool.idfaAuthorizationFinish //idfa授权完成
|
VPAppTool.idfaAuthorizationFinish //idfa授权完成
|
||||||
else {
|
else {
|
||||||
@ -60,21 +66,16 @@ extension SceneDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func _handleOpenAppMessage(webpageURL: URL?) {
|
private func _handleOpenAppMessage(webpageURL: URL?) {
|
||||||
if Self.hasOpenMessage { return }
|
|
||||||
|
|
||||||
Self.hasOpenMessage = true
|
guard SceneDelegate.allowOpenMessage else { return }
|
||||||
|
SceneDelegate.allowOpenMessage = false
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
|
|
||||||
Self.hasOpenMessage = false
|
|
||||||
}
|
|
||||||
|
|
||||||
//统计用URL
|
//统计用URL
|
||||||
var statUrlStr: String? = webpageURL?.absoluteString
|
var statUrlStr: String? = webpageURL?.absoluteString
|
||||||
var data: [String : Any]? = webpageURL?.query?.vp_urlQuryToDictionary()
|
var data: [String : Any]? = webpageURL?.query?.vp_urlQuryToDictionary()
|
||||||
|
|
||||||
|
|
||||||
if let pasteStr = UIPasteboard.general.string, pasteStr.contains("veloriaapp") {
|
if statUrlStr == nil, let pasteStr = UIPasteboard.general.string, pasteStr.contains("veloriaapp") {
|
||||||
UIPasteboard.general.string = nil
|
|
||||||
let tempArr = pasteStr.components(separatedBy: "?")
|
let tempArr = pasteStr.components(separatedBy: "?")
|
||||||
let query = tempArr.last
|
let query = tempArr.last
|
||||||
|
|
||||||
@ -85,7 +86,7 @@ extension SceneDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UIPasteboard.general.string = nil
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,7 +19,25 @@ extension AppDelegate {
|
|||||||
MJRefreshConfig.default.languageCode = VPLocalizedManager.shared.mjLocalizedKey
|
MJRefreshConfig.default.languageCode = VPLocalizedManager.shared.mjLocalizedKey
|
||||||
|
|
||||||
//Adjust
|
//Adjust
|
||||||
|
#if DEBUG
|
||||||
|
let config = ADJConfig(appToken: "jmtc740fki68", environment: ADJEnvironmentSandbox)
|
||||||
|
config?.logLevel = .verbose
|
||||||
|
#else
|
||||||
let config = ADJConfig(appToken: "jmtc740fki68", environment: ADJEnvironmentProduction)
|
let config = ADJConfig(appToken: "jmtc740fki68", environment: ADJEnvironmentProduction)
|
||||||
|
#endif
|
||||||
|
config?.delegate = self
|
||||||
Adjust.initSdk(config)
|
Adjust.initSdk(config)
|
||||||
|
|
||||||
|
AppLinkUtility.fetchDeferredAppLink { url, error in
|
||||||
|
if let url = url, error != nil {
|
||||||
|
VPAppTool.sceneDelegate?.vp_handleOpenAppMessage(webpageURL: url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension AppDelegate: AdjustDelegate {
|
||||||
|
func adjustDeferredDeeplinkReceived(_ deeplink: URL?) -> Bool {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||||||
|
|
||||||
func sceneDidEnterBackground(_ scene: UIScene) {
|
func sceneDidEnterBackground(_ scene: UIScene) {
|
||||||
vpLog(message: "++++++++++++++sceneDidEnterBackground")
|
vpLog(message: "++++++++++++++sceneDidEnterBackground")
|
||||||
|
SceneDelegate.allowOpenMessage = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,7 +77,8 @@ class VPWebView: WKWebView {
|
|||||||
|
|
||||||
func load(urlStr: String) {
|
func load(urlStr: String) {
|
||||||
guard let url = URL(string: urlStr) else { return }
|
guard let url = URL(string: urlStr) else { return }
|
||||||
let request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 30)
|
// let request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 30)
|
||||||
|
let request = URLRequest(url: url, cachePolicy: .returnCacheDataElseLoad, timeoutInterval: 30)
|
||||||
self.load(request)
|
self.load(request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,11 @@ class VPMoreVideoViewController: VPViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private lazy var bgView: UIImageView = {
|
||||||
|
let imageView = UIImageView(image: UIImage(named: "more_bg_image"))
|
||||||
|
return imageView
|
||||||
|
}()
|
||||||
|
|
||||||
private lazy var titleLeftImageView: UIImageView = {
|
private lazy var titleLeftImageView: UIImageView = {
|
||||||
let imageView = UIImageView(image: UIImage(named: "title_icon_01"))
|
let imageView = UIImageView(image: UIImage(named: "title_icon_01"))
|
||||||
return imageView
|
return imageView
|
||||||
@ -67,11 +72,16 @@ class VPMoreVideoViewController: VPViewController {
|
|||||||
extension VPMoreVideoViewController {
|
extension VPMoreVideoViewController {
|
||||||
|
|
||||||
private func vp_setupUI() {
|
private func vp_setupUI() {
|
||||||
|
view.addSubview(bgView)
|
||||||
view.addSubview(titleLeftImageView)
|
view.addSubview(titleLeftImageView)
|
||||||
view.addSubview(titleRightImageView)
|
view.addSubview(titleRightImageView)
|
||||||
view.addSubview(titleLabel)
|
view.addSubview(titleLabel)
|
||||||
view.addSubview(collectionView)
|
view.addSubview(collectionView)
|
||||||
|
|
||||||
|
bgView.snp.makeConstraints { make in
|
||||||
|
make.left.right.top.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
titleLeftImageView.snp.makeConstraints { make in
|
titleLeftImageView.snp.makeConstraints { make in
|
||||||
make.left.equalToSuperview().offset(15)
|
make.left.equalToSuperview().offset(15)
|
||||||
make.top.equalToSuperview().offset(UIScreen.navBarHeight + 10)
|
make.top.equalToSuperview().offset(UIScreen.navBarHeight + 10)
|
||||||
|
@ -26,6 +26,7 @@ class VPDetailRecommandBannerCell: FSPagerViewCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private(set) lazy var player: VPPlayer = {
|
private(set) lazy var player: VPPlayer = {
|
||||||
let player = VPPlayer()
|
let player = VPPlayer()
|
||||||
player.playerView = playerView
|
player.playerView = playerView
|
||||||
@ -33,33 +34,52 @@ class VPDetailRecommandBannerCell: FSPagerViewCell {
|
|||||||
return player
|
return player
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
private(set) lazy var bgView: UIView = {
|
||||||
|
let view = VPGradientView()
|
||||||
|
view.isHidden = true
|
||||||
|
view.layer.cornerRadius = 14
|
||||||
|
view.layer.masksToBounds = true
|
||||||
|
view.colors = [UIColor.color05CEA0(alpha: 0.5).cgColor, UIColor.color7C174F(alpha: 0.5).cgColor]
|
||||||
|
view.locations = [0, 1]
|
||||||
|
view.startPoint = .init(x: 0, y: 0.3)
|
||||||
|
view.endPoint = .init(x: 1, y: 0.8)
|
||||||
|
return view
|
||||||
|
}()
|
||||||
|
|
||||||
private lazy var coverImageView: VPImageView = {
|
private lazy var coverImageView: VPImageView = {
|
||||||
let imageView = VPImageView()
|
let imageView = VPImageView()
|
||||||
|
imageView.layer.cornerRadius = bgView.layer.cornerRadius
|
||||||
|
imageView.layer.masksToBounds = true
|
||||||
return imageView
|
return imageView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var playerView: UIView = {
|
private lazy var playerView: UIView = {
|
||||||
let view = UIView()
|
let view = UIView()
|
||||||
|
view.layer.cornerRadius = bgView.layer.cornerRadius
|
||||||
|
view.layer.masksToBounds = true
|
||||||
return view
|
return view
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
contentView.layer.cornerRadius = 14
|
|
||||||
contentView.layer.masksToBounds = true
|
|
||||||
|
|
||||||
|
contentView.addSubview(bgView)
|
||||||
contentView.addSubview(playerView)
|
contentView.addSubview(playerView)
|
||||||
contentView.addSubview(coverImageView)
|
contentView.addSubview(coverImageView)
|
||||||
|
|
||||||
coverImageView.snp.makeConstraints { make in
|
|
||||||
|
bgView.snp.makeConstraints { make in
|
||||||
make.edges.equalToSuperview()
|
make.edges.equalToSuperview()
|
||||||
}
|
}
|
||||||
|
coverImageView.snp.makeConstraints { make in
|
||||||
|
make.left.equalToSuperview().offset(2.5)
|
||||||
|
make.top.equalToSuperview().offset(2.5)
|
||||||
|
make.center.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
playerView.snp.makeConstraints { make in
|
playerView.snp.makeConstraints { make in
|
||||||
make.edges.equalToSuperview()
|
make.edges.equalTo(coverImageView)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +34,10 @@ class VPDetailRecommandView: HWPanModalContentView {
|
|||||||
|
|
||||||
oldValue?.isCurrentPlayer = false
|
oldValue?.isCurrentPlayer = false
|
||||||
oldValue?.player.pause()
|
oldValue?.player.pause()
|
||||||
|
oldValue?.bgView.isHidden = true
|
||||||
|
|
||||||
currentCell?.isCurrentPlayer = true
|
currentCell?.isCurrentPlayer = true
|
||||||
|
currentCell?.bgView.isHidden = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,6 +299,9 @@ extension VPDetailRecommandView: FSPagerViewDelegate, FSPagerViewDataSource {
|
|||||||
func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
|
func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
|
||||||
let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) as! VPDetailRecommandBannerCell
|
let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) as! VPDetailRecommandBannerCell
|
||||||
cell.model = self.dataArr[index]
|
cell.model = self.dataArr[index]
|
||||||
|
if currentCell == nil, index == 0 {
|
||||||
|
cell.bgView.isHidden = false
|
||||||
|
}
|
||||||
return cell
|
return cell
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,5 +317,6 @@ extension VPDetailRecommandView: FSPagerViewDelegate, FSPagerViewDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,40 +25,55 @@ class VPPlayerRechargeView: HWPanModalContentView {
|
|||||||
var model: VPPayTemplateModel? {
|
var model: VPPayTemplateModel? {
|
||||||
didSet {
|
didSet {
|
||||||
stackView.removeAllArrangedSubview()
|
stackView.removeAllArrangedSubview()
|
||||||
|
guard let model = self.model else { return }
|
||||||
|
|
||||||
if let model = self.model {
|
if let sort = model.sort, sort.count > 0 {
|
||||||
|
sort.forEach {
|
||||||
if let list = model.list_sub_vip, list.count > 0 {
|
if $0 == .vip {
|
||||||
self.stackView.addArrangedSubview(self.vipView)
|
addVipView()
|
||||||
self.vipView.dataArr = list
|
} else if $0 == .coin {
|
||||||
}
|
addCoinView()
|
||||||
|
|
||||||
if let list = model.list_coins, list.count > 0 {
|
|
||||||
self.stackView.addArrangedSubview(self.coinsView)
|
|
||||||
self.coinsView.dataArr = list
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.stackView.arrangedSubviews.count == 1,
|
|
||||||
let view = self.stackView.arrangedSubviews.first,
|
|
||||||
view == self.coinsView {
|
|
||||||
scrollView.snp.updateConstraints { make in
|
|
||||||
make.top.equalToSuperview().offset(56)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
scrollView.snp.updateConstraints { make in
|
|
||||||
make.top.equalToSuperview().offset(41)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
addVipView()
|
||||||
self.stackView.addArrangedSubview(tipView)
|
addCoinView()
|
||||||
}
|
}
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { [weak self] in
|
|
||||||
|
|
||||||
|
self.stackView.addArrangedSubview(tipView)
|
||||||
|
|
||||||
|
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
|
||||||
self?.panModalSetNeedsLayoutUpdate()
|
self?.panModalSetNeedsLayoutUpdate()
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var unlockCoin: Int? {
|
||||||
|
didSet {
|
||||||
|
guard let coin = unlockCoin, coin > 0 else {
|
||||||
|
self.unlockCoinBgView.isHidden = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.unlockCoinBgView.isHidden = false
|
||||||
|
|
||||||
|
let coinCountStr = " \(coin)"
|
||||||
|
let text = "veloria_unlock".localized + coinCountStr
|
||||||
|
let coinRange = text.ocString().range(of: coinCountStr)
|
||||||
|
|
||||||
|
let string = NSMutableAttributedString(string: text)
|
||||||
|
string.color = .colorFFFFFF()
|
||||||
|
string.font = .fontRegular(ofSize: 13)
|
||||||
|
string.setColor(.color05CEA0(), range: coinRange)
|
||||||
|
string.setFont(.fontMedium(ofSize: 13), range: coinRange)
|
||||||
|
|
||||||
|
|
||||||
|
unlockCoinLabel.attributedText = string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var buyFinishBlock: (() -> Void)?
|
var buyFinishBlock: (() -> Void)?
|
||||||
var vipBuyFinishBlock: (() -> Void)?
|
var vipBuyFinishBlock: (() -> Void)?
|
||||||
|
|
||||||
@ -81,6 +96,22 @@ class VPPlayerRechargeView: HWPanModalContentView {
|
|||||||
return label
|
return label
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
private lazy var unlockCoinBgView: UIView = {
|
||||||
|
let view = VPGradientView()
|
||||||
|
view.colors = [UIColor.color05CEA0(alpha: 0.5).cgColor, UIColor.color7C174F(alpha: 0.5).cgColor]
|
||||||
|
view.locations = [0, 1]
|
||||||
|
view.startPoint = .init(x: 0, y: 0.3)
|
||||||
|
view.endPoint = .init(x: 1, y: 0.8)
|
||||||
|
view.layer.cornerRadius = 13
|
||||||
|
view.layer.masksToBounds = true
|
||||||
|
return view
|
||||||
|
}()
|
||||||
|
|
||||||
|
private lazy var unlockCoinLabel: UILabel = {
|
||||||
|
let label = UILabel()
|
||||||
|
return label
|
||||||
|
}()
|
||||||
|
|
||||||
private lazy var coinIconImageView: UIImageView = {
|
private lazy var coinIconImageView: UIImageView = {
|
||||||
let imageView = UIImageView(image: UIImage(named: "coin_icon_07"))
|
let imageView = UIImageView(image: UIImage(named: "coin_icon_07"))
|
||||||
return imageView
|
return imageView
|
||||||
@ -88,6 +119,7 @@ class VPPlayerRechargeView: HWPanModalContentView {
|
|||||||
|
|
||||||
private lazy var scrollView: VPScrollView = {
|
private lazy var scrollView: VPScrollView = {
|
||||||
let scrollView = VPScrollView()
|
let scrollView = VPScrollView()
|
||||||
|
scrollView.isScrollEnabled = true
|
||||||
return scrollView
|
return scrollView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -239,6 +271,20 @@ class VPPlayerRechargeView: HWPanModalContentView {
|
|||||||
|
|
||||||
extension VPPlayerRechargeView {
|
extension VPPlayerRechargeView {
|
||||||
|
|
||||||
|
private func addVipView() {
|
||||||
|
if let list = model?.list_sub_vip, list.count > 0 {
|
||||||
|
self.stackView.addArrangedSubview(self.vipView)
|
||||||
|
self.vipView.dataArr = list
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func addCoinView() {
|
||||||
|
if let list = model?.list_coins, list.count > 0 {
|
||||||
|
self.stackView.addArrangedSubview(self.coinsView)
|
||||||
|
self.coinsView.dataArr = list
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@objc private func updateCoin() {
|
@objc private func updateCoin() {
|
||||||
let coinCountStr = " \(VPLoginManager.manager.userInfo?.totalCoin ?? 0)"
|
let coinCountStr = " \(VPLoginManager.manager.userInfo?.totalCoin ?? 0)"
|
||||||
let text = "veloria_your_coins".localized + coinCountStr
|
let text = "veloria_your_coins".localized + coinCountStr
|
||||||
@ -265,7 +311,10 @@ extension VPPlayerRechargeView {
|
|||||||
addSubview(bgView)
|
addSubview(bgView)
|
||||||
addSubview(closeButton)
|
addSubview(closeButton)
|
||||||
addSubview(coinLabel)
|
addSubview(coinLabel)
|
||||||
addSubview(coinIconImageView)
|
// addSubview(coinIconImageView)
|
||||||
|
addSubview(unlockCoinBgView)
|
||||||
|
unlockCoinBgView.addSubview(unlockCoinLabel)
|
||||||
|
unlockCoinBgView.addSubview(coinIconImageView)
|
||||||
addSubview(scrollView)
|
addSubview(scrollView)
|
||||||
scrollView.addSubview(stackView)
|
scrollView.addSubview(stackView)
|
||||||
|
|
||||||
@ -282,17 +331,29 @@ extension VPPlayerRechargeView {
|
|||||||
|
|
||||||
coinLabel.snp.makeConstraints { make in
|
coinLabel.snp.makeConstraints { make in
|
||||||
make.left.equalToSuperview().offset(15)
|
make.left.equalToSuperview().offset(15)
|
||||||
make.centerY.equalTo(coinIconImageView)
|
make.centerY.equalTo(closeButton)
|
||||||
|
}
|
||||||
|
|
||||||
|
unlockCoinBgView.snp.makeConstraints { make in
|
||||||
|
make.left.equalTo(coinLabel.snp.right).offset(6)
|
||||||
|
make.centerY.equalTo(coinLabel)
|
||||||
|
make.height.equalTo(26)
|
||||||
|
}
|
||||||
|
|
||||||
|
unlockCoinLabel.snp.makeConstraints { make in
|
||||||
|
make.centerY.equalToSuperview()
|
||||||
|
make.left.equalToSuperview().offset(12)
|
||||||
}
|
}
|
||||||
|
|
||||||
coinIconImageView.snp.makeConstraints { make in
|
coinIconImageView.snp.makeConstraints { make in
|
||||||
make.left.equalTo(coinLabel.snp.right).offset(3)
|
make.centerY.equalToSuperview()
|
||||||
make.centerY.equalTo(closeButton)
|
make.left.equalTo(unlockCoinLabel.snp.right).offset(2)
|
||||||
|
make.right.equalToSuperview().offset(-12)
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollView.snp.makeConstraints { make in
|
scrollView.snp.makeConstraints { make in
|
||||||
make.left.right.equalToSuperview()
|
make.left.right.equalToSuperview()
|
||||||
make.top.equalToSuperview().offset(41)
|
make.top.equalToSuperview().offset(48)
|
||||||
make.bottom.equalToSuperview()
|
make.bottom.equalToSuperview()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,6 +88,11 @@ extension VPVideoPlayViewModel {
|
|||||||
|
|
||||||
let view = VPPlayerRechargeView()
|
let view = VPPlayerRechargeView()
|
||||||
view.model = model
|
view.model = model
|
||||||
|
if videoInfo.is_lock != true {
|
||||||
|
view.unlockCoin = nil
|
||||||
|
} else {
|
||||||
|
view.unlockCoin = videoInfo.coins
|
||||||
|
}
|
||||||
view.shortPlayId = videoInfo.short_play_id
|
view.shortPlayId = videoInfo.short_play_id
|
||||||
view.videoId = videoInfo.short_play_video_id
|
view.videoId = videoInfo.short_play_video_id
|
||||||
view.buyFinishBlock = { [weak self] in
|
view.buyFinishBlock = { [weak self] in
|
||||||
|
@ -12,6 +12,8 @@ class VPStoreViewController: VPViewController {
|
|||||||
///vip购买成功回调
|
///vip购买成功回调
|
||||||
var vipBuyFinishBlock: (() -> Void)?
|
var vipBuyFinishBlock: (() -> Void)?
|
||||||
|
|
||||||
|
private var templateModel: VPPayTemplateModel?
|
||||||
|
|
||||||
private lazy var scrollView: VPScrollView = {
|
private lazy var scrollView: VPScrollView = {
|
||||||
let scrollView = VPScrollView()
|
let scrollView = VPScrollView()
|
||||||
return scrollView
|
return scrollView
|
||||||
@ -88,6 +90,42 @@ class VPStoreViewController: VPViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension VPStoreViewController {
|
||||||
|
|
||||||
|
private func updateLayout() {
|
||||||
|
guard let model = self.templateModel else { return }
|
||||||
|
|
||||||
|
if let sort = model.sort, sort.count > 0 {
|
||||||
|
sort.forEach {
|
||||||
|
if $0 == .vip {
|
||||||
|
addVipView()
|
||||||
|
} else if $0 == .coin {
|
||||||
|
addCoinView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
addVipView()
|
||||||
|
addCoinView()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private func addVipView() {
|
||||||
|
if let list = templateModel?.list_sub_vip, list.count > 0 {
|
||||||
|
self.stackView.addArrangedSubview(self.vipView)
|
||||||
|
self.vipView.dataArr = list
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func addCoinView() {
|
||||||
|
if let list = templateModel?.list_coins, list.count > 0 {
|
||||||
|
self.stackView.addArrangedSubview(self.coinsView)
|
||||||
|
self.coinsView.dataArr = list
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
extension VPStoreViewController {
|
extension VPStoreViewController {
|
||||||
|
|
||||||
private func vp_setupUI() {
|
private func vp_setupUI() {
|
||||||
@ -115,18 +153,11 @@ extension VPStoreViewController {
|
|||||||
|
|
||||||
VPWalletAPI.requestPayTemplate { [weak self] model in
|
VPWalletAPI.requestPayTemplate { [weak self] model in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
self.stackView.removeAllArrangedSubview()
|
||||||
|
|
||||||
if let model = model {
|
if let model = model {
|
||||||
self.stackView.removeAllArrangedSubview()
|
self.templateModel = model
|
||||||
|
self.updateLayout()
|
||||||
if let list = model.list_sub_vip, list.count > 0 {
|
|
||||||
self.stackView.addArrangedSubview(self.vipView)
|
|
||||||
self.vipView.dataArr = list
|
|
||||||
}
|
|
||||||
|
|
||||||
if let list = model.list_coins, list.count > 0 {
|
|
||||||
self.stackView.addArrangedSubview(self.coinsView)
|
|
||||||
self.coinsView.dataArr = list
|
|
||||||
}
|
|
||||||
|
|
||||||
self.stackView.addArrangedSubview(self.tipView)
|
self.stackView.addArrangedSubview(self.tipView)
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,12 @@ import SmartCodable
|
|||||||
|
|
||||||
class VPPayTemplateModel: VPModel, SmartCodable {
|
class VPPayTemplateModel: VPModel, SmartCodable {
|
||||||
|
|
||||||
|
enum SortName: String, SmartCaseDefaultable {
|
||||||
|
case coin = "list_coins"
|
||||||
|
case vip = "list_sub_vip"
|
||||||
|
}
|
||||||
|
|
||||||
var list_coins: [VPPayTemplateItem]?
|
var list_coins: [VPPayTemplateItem]?
|
||||||
var list_sub_vip: [VPPayTemplateItem]?
|
var list_sub_vip: [VPPayTemplateItem]?
|
||||||
|
var sort: [SortName]?
|
||||||
}
|
}
|
||||||
|
@ -30,13 +30,15 @@ class VPStoreCoinsBuyView: UIView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CATransaction.setCompletionBlock { [weak self] in
|
UIView.performWithoutAnimation { [weak self] in
|
||||||
guard let self = self else { return }
|
self?.reloadData()
|
||||||
self.updateLayout()
|
}
|
||||||
|
self.bigCollectionView.performBatchUpdates(nil) { [weak self] _ in
|
||||||
|
self?.updateLayout()
|
||||||
|
}
|
||||||
|
self.smallCollectionView.performBatchUpdates(nil) { [weak self] _ in
|
||||||
|
self?.updateLayout()
|
||||||
}
|
}
|
||||||
CATransaction.begin()
|
|
||||||
self.reloadData()
|
|
||||||
CATransaction.commit()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,15 +9,15 @@ import UIKit
|
|||||||
|
|
||||||
class VPStoreVipBuyView: UIView {
|
class VPStoreVipBuyView: UIView {
|
||||||
|
|
||||||
override var intrinsicContentSize: CGSize {
|
// override var intrinsicContentSize: CGSize {
|
||||||
var height: CGFloat = 1
|
// var height: CGFloat = 1
|
||||||
|
//
|
||||||
if dataArr.count > 0, collectionView.contentSize.height > 0 {
|
// if dataArr.count > 0, collectionView.contentSize.height > 0 {
|
||||||
height = collectionView.contentSize.height + 1
|
// height = collectionView.contentSize.height + 1
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return .init(width: UIScreen.width, height: height)
|
// return .init(width: UIScreen.width, height: height)
|
||||||
}
|
// }
|
||||||
|
|
||||||
var buyFinishBlock: (() -> Void)?
|
var buyFinishBlock: (() -> Void)?
|
||||||
|
|
||||||
@ -31,7 +31,11 @@ class VPStoreVipBuyView: UIView {
|
|||||||
self?.collectionView.reloadData()
|
self?.collectionView.reloadData()
|
||||||
}
|
}
|
||||||
self.collectionView.performBatchUpdates(nil) { [weak self] _ in
|
self.collectionView.performBatchUpdates(nil) { [weak self] _ in
|
||||||
self?.invalidateIntrinsicContentSize()
|
guard let self = self else { return }
|
||||||
|
let height = self.collectionView.contentSize.height + 1
|
||||||
|
self.collectionView.snp.updateConstraints { make in
|
||||||
|
make.height.equalTo(height)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -39,6 +43,14 @@ class VPStoreVipBuyView: UIView {
|
|||||||
|
|
||||||
private var currentIndex: Int?
|
private var currentIndex: Int?
|
||||||
|
|
||||||
|
private lazy var titleLabel: UILabel = {
|
||||||
|
let label = UILabel()
|
||||||
|
label.font = .fontMedium(ofSize: 13)
|
||||||
|
label.textColor = .colorFFFFFF()
|
||||||
|
label.text = "VIP |" + "veloria_store_auto_renew".localized
|
||||||
|
return label
|
||||||
|
}()
|
||||||
|
|
||||||
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||||
let layout = UICollectionViewFlowLayout()
|
let layout = UICollectionViewFlowLayout()
|
||||||
layout.itemSize = .init(width: UIScreen.width - 30, height: 130)
|
layout.itemSize = .init(width: UIScreen.width - 30, height: 130)
|
||||||
@ -71,10 +83,18 @@ class VPStoreVipBuyView: UIView {
|
|||||||
extension VPStoreVipBuyView {
|
extension VPStoreVipBuyView {
|
||||||
|
|
||||||
private func vp_setupUI() {
|
private func vp_setupUI() {
|
||||||
|
addSubview(titleLabel)
|
||||||
addSubview(collectionView)
|
addSubview(collectionView)
|
||||||
|
|
||||||
|
titleLabel.snp.makeConstraints { make in
|
||||||
|
make.left.equalToSuperview().offset(15)
|
||||||
|
make.top.equalToSuperview()
|
||||||
|
}
|
||||||
|
|
||||||
collectionView.snp.makeConstraints { make in
|
collectionView.snp.makeConstraints { make in
|
||||||
make.edges.equalToSuperview()
|
make.left.right.bottom.equalToSuperview()
|
||||||
|
make.top.equalTo(titleLabel.snp.bottom)
|
||||||
|
make.height.equalTo(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ class VPWalletHeaderItemView: UIView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var textAlignment: NSTextAlignment = .left
|
||||||
|
|
||||||
private lazy var coinCountLabel: UILabel = {
|
private lazy var coinCountLabel: UILabel = {
|
||||||
let label = UILabel()
|
let label = UILabel()
|
||||||
@ -36,8 +37,9 @@ class VPWalletHeaderItemView: UIView {
|
|||||||
return label
|
return label
|
||||||
}()
|
}()
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
init(textAlignment: NSTextAlignment) {
|
||||||
super.init(frame: frame)
|
super.init(frame: .zero)
|
||||||
|
self.textAlignment = textAlignment
|
||||||
|
|
||||||
vp_setupUI()
|
vp_setupUI()
|
||||||
}
|
}
|
||||||
@ -56,13 +58,16 @@ extension VPWalletHeaderItemView {
|
|||||||
|
|
||||||
|
|
||||||
titleLabel.snp.makeConstraints { make in
|
titleLabel.snp.makeConstraints { make in
|
||||||
// make.left.equalTo(coinCountLabel)
|
if self.textAlignment == .left {
|
||||||
make.centerX.equalToSuperview()
|
make.left.equalToSuperview().offset(20)
|
||||||
|
} else if self.textAlignment == .center {
|
||||||
|
make.centerX.equalToSuperview().offset(-20)
|
||||||
|
}
|
||||||
make.top.equalToSuperview()
|
make.top.equalToSuperview()
|
||||||
}
|
}
|
||||||
|
|
||||||
coinCountLabel.snp.makeConstraints { make in
|
coinCountLabel.snp.makeConstraints { make in
|
||||||
make.centerX.equalToSuperview()
|
make.left.equalTo(titleLabel)
|
||||||
make.bottom.equalToSuperview()
|
make.bottom.equalToSuperview()
|
||||||
make.top.equalTo(titleLabel.snp.bottom).offset(5)
|
make.top.equalTo(titleLabel.snp.bottom).offset(5)
|
||||||
}
|
}
|
||||||
|
@ -57,13 +57,13 @@ class VPWalletHeaderView: UIView {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var rechargeCoinView: VPWalletHeaderItemView = {
|
private lazy var rechargeCoinView: VPWalletHeaderItemView = {
|
||||||
let view = VPWalletHeaderItemView()
|
let view = VPWalletHeaderItemView(textAlignment: .left)
|
||||||
view.title = "veloria_recharge".localized
|
view.title = "veloria_recharge".localized
|
||||||
return view
|
return view
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var sendCoinView: VPWalletHeaderItemView = {
|
private lazy var sendCoinView: VPWalletHeaderItemView = {
|
||||||
let view = VPWalletHeaderItemView()
|
let view = VPWalletHeaderItemView(textAlignment: .center)
|
||||||
view.title = "veloria_bonus".localized
|
view.title = "veloria_bonus".localized
|
||||||
return view
|
return view
|
||||||
}()
|
}()
|
||||||
|
22
Veloria/Source/Assets.xcassets/image/more_bg_image.imageset/Contents.json
vendored
Normal file
22
Veloria/Source/Assets.xcassets/image/more_bg_image.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "顶部bg@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "顶部bg@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
Veloria/Source/Assets.xcassets/image/more_bg_image.imageset/顶部bg@2x.png
vendored
Normal file
BIN
Veloria/Source/Assets.xcassets/image/more_bg_image.imageset/顶部bg@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 412 KiB |
BIN
Veloria/Source/Assets.xcassets/image/more_bg_image.imageset/顶部bg@3x.png
vendored
Normal file
BIN
Veloria/Source/Assets.xcassets/image/more_bg_image.imageset/顶部bg@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 715 KiB |
@ -101,6 +101,7 @@
|
|||||||
"veloria_vip_activate_content" = "Activate vip and enjoy HD video privileges.";
|
"veloria_vip_activate_content" = "Activate vip and enjoy HD video privileges.";
|
||||||
"veloria_later" = "Later";
|
"veloria_later" = "Later";
|
||||||
"veloria_go" = "Go";
|
"veloria_go" = "Go";
|
||||||
|
"veloria_unlock" = "Unlock:";
|
||||||
|
|
||||||
|
|
||||||
"veloria_bonus_count_text" = "+## Bonus";
|
"veloria_bonus_count_text" = "+## Bonus";
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
<array>
|
<array>
|
||||||
<string>applinks:qjwl168.com</string>
|
<string>applinks:qjwl168.com</string>
|
||||||
<string>applinks:veloriaapp.go.link</string>
|
<string>applinks:veloriaapp.go.link</string>
|
||||||
|
<string>applinks:lxjg.adj.st</string>
|
||||||
</array>
|
</array>
|
||||||
<key>keychain-access-groups</key>
|
<key>keychain-access-groups</key>
|
||||||
<array/>
|
<array/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user