205 lines
7.9 KiB
Swift
205 lines
7.9 KiB
Swift
//
|
||
// MP_IAPViewController.swift
|
||
// relax.offline.mp3.music
|
||
//
|
||
// Created by Mr.Zhou on 2024/7/31.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
///内购选中图片
|
||
let IAPChooseedImage:UIImage? = .init(named: "IAP Chooseed'logo")
|
||
///内购未选中图片
|
||
let IAPChooseImage:UIImage? = .init(named: "IAP Choose'logo")
|
||
///内购页面(A/B面样式区别)
|
||
class MP_IAPViewController: UIViewController {
|
||
//样式版,根据A/B面决定
|
||
@IBOutlet weak var bgImageView: UIImageView!
|
||
@IBOutlet weak var scrollView: UIScrollView!
|
||
var isType:Bool = false
|
||
@IBOutlet weak var aConstraint: NSLayoutConstraint!
|
||
@IBOutlet weak var bConstraint: NSLayoutConstraint!
|
||
@IBOutlet weak var adView: UIView!
|
||
@IBOutlet weak var adLabel: UILabel!
|
||
@IBOutlet weak var musicView: UIView!
|
||
@IBOutlet weak var musicLabel: UILabel!
|
||
@IBOutlet weak var downloadView: UIView!
|
||
@IBOutlet weak var downloadLabel: UILabel!
|
||
@IBOutlet weak var weekView: UIView!{
|
||
didSet{
|
||
weekView.isUserInteractionEnabled = true
|
||
weekView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(chooseLevelClick(_ :))))
|
||
}
|
||
}
|
||
@IBOutlet weak var weekImageView: UIImageView!
|
||
@IBOutlet weak var weekPriceLabel: UILabel!
|
||
@IBOutlet weak var yearView: UIView!{
|
||
didSet{
|
||
yearView.isUserInteractionEnabled = true
|
||
yearView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(chooseLevelClick(_ :))))
|
||
}
|
||
}
|
||
@IBOutlet weak var yearImageView: UIImageView!
|
||
@IBOutlet weak var yearPriceLabel: UILabel!
|
||
@IBOutlet weak var lifeView: UIView!{
|
||
didSet{
|
||
lifeView.isUserInteractionEnabled = true
|
||
lifeView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(chooseLevelClick(_ :))))
|
||
}
|
||
}
|
||
@IBOutlet weak var lifeImageView: UIImageView!
|
||
@IBOutlet weak var lifePriceLabel: UILabel!
|
||
@IBOutlet weak var noticeLabel: UILabel!{
|
||
didSet{
|
||
noticeLabel.text = NSLocalizedString("No mandatory,cancel at anytime", comment: "提醒用户可以取消订阅")
|
||
}
|
||
}
|
||
@IBOutlet weak var continueBtn: UIButton!{
|
||
didSet{
|
||
continueBtn.setTitle(NSLocalizedString("Continue", comment: "继续"), for: .normal)
|
||
}
|
||
}
|
||
@IBOutlet weak var leftBtn: UIButton!{
|
||
didSet{
|
||
leftBtn.setTitle(NSLocalizedString("Terms of Use", comment: "用户协议"), for: .normal)
|
||
}
|
||
}
|
||
@IBOutlet weak var centerBtn: UIButton!{
|
||
didSet{
|
||
centerBtn.setTitle(NSLocalizedString("Restore", comment: "恢复"), for: .normal)
|
||
}
|
||
}
|
||
@IBOutlet weak var rightBtn: UIButton!{
|
||
didSet{
|
||
rightBtn.setTitle(NSLocalizedString("Privacy Policy", comment: "隐私政策"), for: .normal)
|
||
}
|
||
}
|
||
|
||
var privacyBlock:(() -> Void)?
|
||
var termsBlock:(() -> Void)?
|
||
//选择的等级
|
||
private var level:Int?
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
scrollView.contentInsetAdjustmentBehavior = .never
|
||
MP_IAPManager.shared.requestProducts()
|
||
MP_AnalyticsManager.shared.VIP_page_impAction()
|
||
//根据isType调整约束(A/B面样式存在差距)
|
||
if isType {
|
||
//B面
|
||
bgImageView.image = UIImage(named: "IAP B'bg")
|
||
aConstraint.priority = .init(500)
|
||
bConstraint.priority = .init(999)
|
||
//展示所有的权益
|
||
musicView.isHidden = false
|
||
downloadView.isHidden = false
|
||
|
||
}else {
|
||
//A面
|
||
bgImageView.image = UIImage(named: "IAP A'bg")
|
||
aConstraint.priority = .init(999)
|
||
bConstraint.priority = .init(500)
|
||
//隐藏权益
|
||
musicView.isHidden = true
|
||
downloadView.isHidden = true
|
||
}
|
||
//实现文本填充
|
||
adLabel.attributedText = setSubstring("Ad-free experience, NO ADs!!", coloredText: "NO ADs!!")
|
||
musicLabel.text = "All \"YouTube\" music & videos"
|
||
downloadLabel.text = "Unlimited Downloads"
|
||
|
||
//设置价格文本
|
||
weekPriceLabel.attributedText = setPriceText(1.99)
|
||
yearPriceLabel.attributedText = setPriceText(14.99)
|
||
lifePriceLabel.attributedText = setPriceText(24.99)
|
||
}
|
||
//根据文本内容调整显示颜色
|
||
private func setSubstring(_ fullText:String, coloredText:String) -> NSAttributedString {
|
||
//调整展示颜色
|
||
let attributedString = NSMutableAttributedString(string: fullText, attributes: [.foregroundColor:UIColor.white, .font:UIFont.systemFont(ofSize: 16*width)])
|
||
let attributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor(hex: "#80F988")]
|
||
if let range = fullText.range(of: coloredText) {
|
||
let nsRange = NSRange(range, in: fullText)
|
||
attributedString.addAttributes(attributes, range: nsRange)
|
||
}
|
||
return attributedString
|
||
}
|
||
//设置价格副文本
|
||
private func setPriceText(_ price:Double) -> NSAttributedString {
|
||
let font = UIFont(name: "DINAlternate-Bold", size: 24*width) ?? .systemFont(ofSize: 24*width, weight: .bold)
|
||
let attributedString = NSMutableAttributedString(string: "$\(price)", attributes: [.foregroundColor:UIColor.white, .font:font])
|
||
attributedString.addAttributes([.font:UIFont(name: "DINAlternate-Bold", size: 16*width) ?? .systemFont(ofSize: 16*width, weight: .bold)], range: .init(location: 0, length: 1))
|
||
return attributedString
|
||
}
|
||
|
||
//退出页面
|
||
@IBAction func dismissClick(_ sender: UIButton) {
|
||
dismiss(animated: true)
|
||
}
|
||
//选择档位
|
||
@objc private func chooseLevelClick(_ sender:UITapGestureRecognizer) {
|
||
let tag = sender.view?.tag ?? 0
|
||
switch tag {
|
||
case 0://选择了第一档
|
||
weekPriceLabel.setGradientTextColor(gradientTextColors)
|
||
weekImageView.image = IAPChooseedImage
|
||
|
||
yearPriceLabel.cleanGradientTextColor()
|
||
yearImageView.image = IAPChooseImage
|
||
lifePriceLabel.cleanGradientTextColor()
|
||
lifeImageView.image = IAPChooseImage
|
||
case 1://选择了第二档
|
||
yearPriceLabel.setGradientTextColor(gradientTextColors)
|
||
yearImageView.image = IAPChooseedImage
|
||
|
||
weekPriceLabel.cleanGradientTextColor()
|
||
weekImageView.image = IAPChooseImage
|
||
lifePriceLabel.cleanGradientTextColor()
|
||
lifeImageView.image = IAPChooseImage
|
||
default://选择了第三档
|
||
lifePriceLabel.setGradientTextColor(gradientTextColors)
|
||
lifeImageView.image = IAPChooseedImage
|
||
|
||
weekPriceLabel.cleanGradientTextColor()
|
||
weekImageView.image = IAPChooseImage
|
||
yearPriceLabel.cleanGradientTextColor()
|
||
yearImageView.image = IAPChooseImage
|
||
}
|
||
level = tag
|
||
}
|
||
//继续购买
|
||
@IBAction func continueClick(_ sender: UIButton) {
|
||
guard let level = level else {
|
||
MP_HUD.onlytext("Please select your product type".localizableString(), delay: 1.0, completion: nil)
|
||
return
|
||
}
|
||
guard MP_NetWorkManager.shared.netWorkStatu == .reachable else {
|
||
MP_HUD.onlytext("Bad connection~".localizableString(), delay: 1.0, completion: nil)
|
||
return
|
||
}
|
||
MP_IAPManager.shared.purchaseProduct(level)
|
||
}
|
||
//刷新商店
|
||
@IBAction func reStoreClick(_ sender: UIButton) {
|
||
MP_IAPManager.shared.restorePurchases()
|
||
}
|
||
//协议
|
||
@IBAction func privacyClick(_ sender: UIButton) {
|
||
dismiss(animated: true) {
|
||
[weak self] in
|
||
if let block = self?.privacyBlock {
|
||
block()
|
||
}
|
||
}
|
||
}
|
||
//用户服务
|
||
@IBAction func termsClick(_ sender: UIButton) {
|
||
dismiss(animated: true) {
|
||
[weak self] in
|
||
if let block = self?.termsBlock {
|
||
block()
|
||
}
|
||
}
|
||
}
|
||
}
|