Commit 4e3e4b0c6ddf815c69e2ecab0914502ce506b477
1 parent
353a13e9
幼教中国-我的课程区块没内容时不显示 , 左右滑时当前视图置为顶层 , 上滑h5和下滑h5复用的问题 , 电商h5跳转的支付页面
Showing
20 changed files
with
506 additions
and
44 deletions
metaCode.xcodeproj/project.pbxproj
| ... | ... | @@ -113,6 +113,8 @@ |
| 113 | 113 | 19B153CB2BC3E1870018906C /* CNLiveShopPayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CA2BC3E1870018906C /* CNLiveShopPayController.swift */; }; |
| 114 | 114 | 19B153CD2BC3EB690018906C /* CNLiveShoph5ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CC2BC3EB690018906C /* CNLiveShoph5ViewModel.swift */; }; |
| 115 | 115 | 19B153CF2BC540FF0018906C /* CNLivePayOrderInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */; }; |
| 116 | + 19B153D22BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */; }; | |
| 117 | + 19B153D42BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */; }; | |
| 116 | 118 | 19BB1FDF2AEA3A450094D962 /* CNSlideBaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FDE2AEA3A450094D962 /* CNSlideBaseNavigationController.swift */; }; |
| 117 | 119 | 19BB1FE12AEB5C220094D962 /* CNLiveShopConsoleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */; }; |
| 118 | 120 | 19BB1FE32AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FE22AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift */; }; |
| ... | ... | @@ -385,6 +387,8 @@ |
| 385 | 387 | 19B153CA2BC3E1870018906C /* CNLiveShopPayController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayController.swift; sourceTree = "<group>"; }; |
| 386 | 388 | 19B153CC2BC3EB690018906C /* CNLiveShoph5ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShoph5ViewModel.swift; sourceTree = "<group>"; }; |
| 387 | 389 | 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePayOrderInfoModel.swift; sourceTree = "<group>"; }; |
| 390 | + 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayNeedPaymentCell.swift; sourceTree = "<group>"; }; | |
| 391 | + 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayWeChatAlipayCell.swift; sourceTree = "<group>"; }; | |
| 388 | 392 | 19BB1FDE2AEA3A450094D962 /* CNSlideBaseNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNSlideBaseNavigationController.swift; sourceTree = "<group>"; }; |
| 389 | 393 | 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopConsoleController.swift; sourceTree = "<group>"; }; |
| 390 | 394 | 19BB1FE22AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopConsoleViewModel.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -857,6 +861,7 @@ |
| 857 | 861 | 191733402B284D4A007BCC04 /* ShopCoupon */, |
| 858 | 862 | 19565ED02AF8D904007D6727 /* GoodsManager */, |
| 859 | 863 | 1938BD4D2B512F4600390A34 /* ShopDetail */, |
| 864 | + 19B153D02BC623780018906C /* Shoph5Pay */, | |
| 860 | 865 | ); |
| 861 | 866 | path = Shop; |
| 862 | 867 | sourceTree = "<group>"; |
| ... | ... | @@ -975,6 +980,15 @@ |
| 975 | 980 | path = ShopPayController; |
| 976 | 981 | sourceTree = "<group>"; |
| 977 | 982 | }; |
| 983 | + 19B153D02BC623780018906C /* Shoph5Pay */ = { | |
| 984 | + isa = PBXGroup; | |
| 985 | + children = ( | |
| 986 | + 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */, | |
| 987 | + 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */, | |
| 988 | + ); | |
| 989 | + path = Shoph5Pay; | |
| 990 | + sourceTree = "<group>"; | |
| 991 | + }; | |
| 978 | 992 | 19BB1FE42AEB93850094D962 /* Model */ = { |
| 979 | 993 | isa = PBXGroup; |
| 980 | 994 | children = ( |
| ... | ... | @@ -1805,6 +1819,7 @@ |
| 1805 | 1819 | 79BB1C162B05C62900C5720C /* CNLiveShopBodyCouponView.swift in Sources */, |
| 1806 | 1820 | 798916E92B04532D00D08302 /* CNLiveSavePointDB.swift in Sources */, |
| 1807 | 1821 | 1938BD242B468AC900390A34 /* CNLivePlayletHomePageHeaderCell.swift in Sources */, |
| 1822 | + 19B153D42BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift in Sources */, | |
| 1808 | 1823 | 19FA20172AE22D3C001F7186 /* CNLiveDownSlideRecommendCell.swift in Sources */, |
| 1809 | 1824 | 19123FC12ABC11170075C883 /* CNWebViewController.swift in Sources */, |
| 1810 | 1825 | 1926C28F2AE0D76C00C71DC3 /* CNLiveDownSlideViewModel.swift in Sources */, |
| ... | ... | @@ -1880,6 +1895,7 @@ |
| 1880 | 1895 | 1938BD222B467C1700390A34 /* CNLivePlayletHomePageCell.swift in Sources */, |
| 1881 | 1896 | 1938BD3F2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift in Sources */, |
| 1882 | 1897 | 798A44FF2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift in Sources */, |
| 1898 | + 19B153D22BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift in Sources */, | |
| 1883 | 1899 | 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */, |
| 1884 | 1900 | 19B153CD2BC3EB690018906C /* CNLiveShoph5ViewModel.swift in Sources */, |
| 1885 | 1901 | 79BB96A62AF21E2800AEA4AC /* CNLiveShopOrderDetailViewController.swift in Sources */, | ... | ... |
metaCode/Classes/Main/HomePage/Controller/AuthMainController/CNMetaCodeHomePageController.swift
| ... | ... | @@ -505,6 +505,7 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel |
| 505 | 505 | |
| 506 | 506 | let identityModel = dataArray[toIndex] as! StandListModel |
| 507 | 507 | if let toBannerView = self.pageFlowView.cells[toIndex] as? CNCustomIndexView{ |
| 508 | + self.pageFlowView.scrollView.bringSubviewToFront(toBannerView) | |
| 508 | 509 | UIView.animate(withDuration: 0.2) { |
| 509 | 510 | toBannerView.downSlideView.frame = CGRectMake(-LeftGap, 0, KSreenWidth, KSreenHeight) |
| 510 | 511 | toBannerView.downSlideView.upSlideVC.view.height = KSreenHeight-DownSlideBottomViewHeight |
| ... | ... | @@ -515,32 +516,22 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel |
| 515 | 516 | } |
| 516 | 517 | |
| 517 | 518 | } |
| 518 | - if let toBannerViewLeftView = self.pageFlowView.cells[toIndex-1] as? CNCustomIndexView{ | |
| 519 | - UIView.animate(withDuration: 0.2) { | |
| 520 | - toBannerViewLeftView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0) | |
| 521 | - toBannerViewLeftView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0) | |
| 519 | + if toIndex-1 >= 0{ | |
| 520 | + if let toBannerViewLeftView = self.pageFlowView.cells[toIndex-1] as? CNCustomIndexView{ | |
| 521 | + UIView.animate(withDuration: 0.2) { | |
| 522 | + toBannerViewLeftView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0) | |
| 523 | + toBannerViewLeftView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0) | |
| 524 | + } | |
| 522 | 525 | } |
| 523 | 526 | } |
| 524 | - if let toBannerViewRightView = self.pageFlowView.cells[toIndex+1] as? CNCustomIndexView{ | |
| 525 | - UIView.animate(withDuration: 0.2) { | |
| 526 | - toBannerViewRightView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0) | |
| 527 | - toBannerViewRightView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0) | |
| 527 | + if toIndex+1 < self.pageFlowView.cells.count{ | |
| 528 | + if let toBannerViewRightView = self.pageFlowView.cells[toIndex+1] as? CNCustomIndexView{ | |
| 529 | + UIView.animate(withDuration: 0.2) { | |
| 530 | + toBannerViewRightView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0) | |
| 531 | + toBannerViewRightView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0) | |
| 532 | + } | |
| 528 | 533 | } |
| 529 | 534 | } |
| 530 | - | |
| 531 | -// for (idx,obj) in self.pageFlowView.cells.enumerated(){ | |
| 532 | -// let bannerView = obj as? CNCustomIndexView | |
| 533 | -// if idx == toIndex{ | |
| 534 | -// bannerView?.downSlideView.frame = CGRectMake(-LeftGap, 0, KSreenWidth, KSreenHeight) | |
| 535 | -// bannerView?.downSlideView.upSlideVC.view.height = KSreenHeight-DownSlideBottomViewHeight | |
| 536 | -// bannerView?.downSlideView.shopConsoleVC.view.height = KSreenHeight-DownSlideBottomViewHeight | |
| 537 | -// | |
| 538 | -// bannerView?.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,KSreenWidth, KSreenHeight) | |
| 539 | -// }else{ | |
| 540 | -// bannerView?.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0) | |
| 541 | -// bannerView?.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0) | |
| 542 | -// } | |
| 543 | -// } | |
| 544 | 535 | } |
| 545 | 536 | |
| 546 | 537 | ... | ... |
metaCode/Classes/Main/HomePage/Controller/DownSlideController/CNUpSlideViewController.swift
| ... | ... | @@ -397,7 +397,9 @@ class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITa |
| 397 | 397 | //没有我的课程 |
| 398 | 398 | self.myCurriculumIndex = -1 |
| 399 | 399 | } |
| 400 | - self.dataArray.insert(albumBaseModel, at: self.myCurriculumIndex) | |
| 400 | + if self.myCurriculumIndex > -1{ | |
| 401 | + self.dataArray.insert(albumBaseModel, at: self.myCurriculumIndex) | |
| 402 | + } | |
| 401 | 403 | self.tableView.reloadData() |
| 402 | 404 | }else if (status == .failed){ |
| 403 | 405 | // self.NetApiStatus = .apiError | ... | ... |
metaCode/Classes/Main/HomePage/Controller/ShopPayController/CNLiveShopPayController.swift
| ... | ... | @@ -6,14 +6,61 @@ |
| 6 | 6 | // 支付页面 |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | +import CNLivePayCostModule | |
| 10 | + | |
| 11 | +///支付类型 | |
| 12 | +enum CNLivePayType { | |
| 13 | + //支付宝 | |
| 14 | + case alipay | |
| 15 | + //微信 | |
| 16 | + case weChat | |
| 17 | +} | |
| 18 | +//支付状态 | |
| 19 | +enum CNLivePayResult { | |
| 20 | + //成功 | |
| 21 | + case success | |
| 22 | + //失败 | |
| 23 | + case failure | |
| 24 | + //取消支付 | |
| 25 | + case cancel | |
| 26 | +} | |
| 9 | 27 | |
| 10 | 28 | //支付完成回调 |
| 11 | -typealias FinishPayCallBack = (_ testStr:String)->Void//_ orderInfoModel:CNLivePayOrderInfoModel | |
| 29 | +typealias FinishPayCallBack = (_ orderInfoModel:CNLivePayOrderInfoModel,_ payType:CNLivePayType,_ payResult:CNLivePayResult)->Void | |
| 12 | 30 | |
| 13 | -class CNLiveShopPayController:CNLiveBaseViewController{ | |
| 31 | +class CNLiveShopPayController:CNLiveBaseViewController,UITableViewDelegate,UITableViewDataSource{ | |
| 14 | 32 | |
| 15 | 33 | var finishPayCallBack:FinishPayCallBack? |
| 16 | 34 | var orderNumber:String |
| 35 | + var orderInfoModel:CNLivePayOrderInfoModel? | |
| 36 | + var currentSeleWechat = true | |
| 37 | + var payType:CNLivePayType? | |
| 38 | + | |
| 39 | + let kCNLiveShopPayNeedPaymentCellIdentifier = "kCNLiveShopPayNeedPaymentCellIdentifier" | |
| 40 | + let kCNLiveShopPayWeChatAlipayCellIdentifier = "kCNLiveShopPayWeChatAlipayCellIdentifier" | |
| 41 | + | |
| 42 | + // MARK: - 懒加载 | |
| 43 | + lazy var tableView : UITableView = { | |
| 44 | + let tableView = UITableView(frame: CGRect(x: 0, y: KNavigationHeight, width: KSreenWidth, height: KSreenHeight-KNavigationHeight-KTabBarHeight), style: .plain) | |
| 45 | + tableView.dataSource = self | |
| 46 | + tableView.delegate = self | |
| 47 | + tableView.separatorStyle = .singleLine | |
| 48 | + tableView.tableFooterView = UIView.init() | |
| 49 | + tableView.register(CNLiveShopPayNeedPaymentCell.self, forCellReuseIdentifier: kCNLiveShopPayNeedPaymentCellIdentifier) | |
| 50 | + tableView.register(CNLiveShopPayWeChatAlipayCell.self, forCellReuseIdentifier: kCNLiveShopPayWeChatAlipayCellIdentifier) | |
| 51 | + return tableView | |
| 52 | + }() | |
| 53 | + | |
| 54 | + lazy var payBtn: UIButton = { | |
| 55 | + let payBtn = UIButton(type: .custom) | |
| 56 | + payBtn.frame = CGRect(x: 0, y: self.tableView.bottom, width: KSreenWidth, height: KTabBarHeight) | |
| 57 | + payBtn.backgroundColor = UIColor(red:0.29, green:0.64, blue:0.25, alpha:1.00) | |
| 58 | + payBtn.setTitleColor(.white, for: .normal) | |
| 59 | + payBtn.setTitle("支付", for: .normal) | |
| 60 | + payBtn.addTarget(self, action: #selector(payBtnAction), for: .touchUpInside) | |
| 61 | + return payBtn | |
| 62 | + }() | |
| 63 | + | |
| 17 | 64 | |
| 18 | 65 | init(orderNumber:String) { |
| 19 | 66 | self.orderNumber = orderNumber |
| ... | ... | @@ -24,6 +71,10 @@ class CNLiveShopPayController:CNLiveBaseViewController{ |
| 24 | 71 | fatalError("init(coder:) has not been implemented") |
| 25 | 72 | } |
| 26 | 73 | |
| 74 | + deinit { | |
| 75 | + NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil) | |
| 76 | + } | |
| 77 | + | |
| 27 | 78 | override func viewDidLoad() { |
| 28 | 79 | super.viewDidLoad() |
| 29 | 80 | navigationBarHidden = false |
| ... | ... | @@ -31,6 +82,26 @@ class CNLiveShopPayController:CNLiveBaseViewController{ |
| 31 | 82 | self.view.backgroundColor = .white |
| 32 | 83 | NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActiveNotification(_:)), name: UIApplication.didBecomeActiveNotification, object: nil) |
| 33 | 84 | self.getOrderInfoMessage() |
| 85 | + self.initUI() | |
| 86 | + if WXApi.isWXAppInstalled(){ | |
| 87 | + print("wx已安装") | |
| 88 | + }else{ | |
| 89 | + print("wx未安装") | |
| 90 | + } | |
| 91 | + let urlScheme = "alipay" | |
| 92 | + if UIApplication.shared.canOpenURL(URL(string: urlScheme)!) { | |
| 93 | + print("已安装") | |
| 94 | + } else { | |
| 95 | + print("未安装") | |
| 96 | + } | |
| 97 | + let wxUrlScheme = "weixin://" | |
| 98 | + if UIApplication.shared.canOpenURL(URL(string: urlScheme)!) { | |
| 99 | + print("已安装") | |
| 100 | + } else { | |
| 101 | + print("未安装") | |
| 102 | + } | |
| 103 | + | |
| 104 | + | |
| 34 | 105 | } |
| 35 | 106 | // MARK: - 获取订单信息 并且进行检测 |
| 36 | 107 | func getOrderInfoMessage(){ |
| ... | ... | @@ -39,8 +110,65 @@ class CNLiveShopPayController:CNLiveBaseViewController{ |
| 39 | 110 | } |
| 40 | 111 | showLoading(message: "") |
| 41 | 112 | CNLiveShoph5ViewModel.postOrderPayWithParams(orderId: self.orderNumber) { result, status in |
| 113 | + hiddenLoading() | |
| 42 | 114 | if status == .success{ |
| 43 | - | |
| 115 | + let orderInfoModel = result as! CNLivePayOrderInfoModel | |
| 116 | + self.orderInfoModel = orderInfoModel | |
| 117 | + self.tableView.reloadData() | |
| 118 | + }else{ | |
| 119 | + } | |
| 120 | + } | |
| 121 | + | |
| 122 | + } | |
| 123 | + | |
| 124 | + func initUI(){ | |
| 125 | + self.view.addSubview(self.tableView) | |
| 126 | + self.view.addSubview(self.payBtn) | |
| 127 | + } | |
| 128 | + | |
| 129 | + @objc func payBtnAction(){ | |
| 130 | + showLoading(message: "") | |
| 131 | + | |
| 132 | + let orderId = self.orderInfoModel?.orderId | |
| 133 | + var userId = self.orderInfoModel?.user_id | |
| 134 | + if userId?.count == 0{ | |
| 135 | + userId = UserInfoManager.shared.userInfo.uid | |
| 136 | + } | |
| 137 | + let descStr = self.orderInfoModel?.body | |
| 138 | + let price = self.orderInfoModel?.totalMoney | |
| 139 | + let body = self.orderInfoModel?.body | |
| 140 | + let coupon_fee = self.orderInfoModel?.couponMoney | |
| 141 | + let notifyUrl = self.orderInfoModel?.notify_url | |
| 142 | + | |
| 143 | + let paramDict = NSMutableDictionary() | |
| 144 | + paramDict.setValue(orderId, forKey: "orderId") | |
| 145 | + paramDict.setValue(userId, forKey: "userId") | |
| 146 | + paramDict.setValue(descStr, forKey: "descStr") | |
| 147 | + paramDict.setValue(price, forKey: "price") | |
| 148 | + paramDict.setValue("1", forKey: "orderType") | |
| 149 | + paramDict.setValue("1", forKey: "type") | |
| 150 | + paramDict.setValue(body, forKey: "body") | |
| 151 | + paramDict.setValue(coupon_fee, forKey: "coupon_fee") | |
| 152 | + paramDict.setValue(notifyUrl, forKey: "notifyUrl") | |
| 153 | + paramDict.setValue("", forKey: "password") | |
| 154 | + | |
| 155 | + var payCostType:CNLivePayCostPayType? | |
| 156 | + if self.currentSeleWechat == true{ | |
| 157 | + self.payType = .weChat | |
| 158 | + payCostType = CNLivePayCostPayTypeWeChatPay | |
| 159 | + }else{ | |
| 160 | + self.payType = .alipay | |
| 161 | + payCostType = CNLivePayCostPayTypeAliPay | |
| 162 | + } | |
| 163 | + | |
| 164 | + CNLivePayCostModule.showShopPayViw(withParamDict: paramDict as! [String : Any], payType: payCostType!) { resultCode in | |
| 165 | + hiddenLoading() | |
| 166 | + if resultCode == 0{ | |
| 167 | + self.checkPayIsSuccessful(lastCount: 5) | |
| 168 | + }else if resultCode == 3{ | |
| 169 | + showMessage(message: "取消支付") | |
| 170 | + }else { | |
| 171 | + showMessage(message: "支付失败") | |
| 44 | 172 | } |
| 45 | 173 | } |
| 46 | 174 | |
| ... | ... | @@ -48,8 +176,107 @@ class CNLiveShopPayController:CNLiveBaseViewController{ |
| 48 | 176 | |
| 49 | 177 | @objc func didBecomeActiveNotification(_ notification: Notification) { |
| 50 | 178 | // 处理应用变得活跃的逻辑 |
| 179 | + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { | |
| 180 | + // 这里写你想要在 0.5 秒后执行的代码 | |
| 181 | + self.checkPayIsSuccessful(lastCount: 0) | |
| 182 | + } | |
| 183 | + | |
| 184 | + } | |
| 185 | + | |
| 186 | + // MARK: - 检测是否支付成功 | |
| 187 | + /// 检测是否支付成功 | |
| 188 | + /// @param lastCount 剩余检测次数 | |
| 189 | + func checkPayIsSuccessful(lastCount:NSInteger){ | |
| 190 | + showLoading(message: "") | |
| 191 | + CNLiveShoph5ViewModel.postIsOrderPayWithOrderId(orderId: self.orderNumber) { result, status in | |
| 192 | + hiddenLoading() | |
| 193 | + if status == .success{ | |
| 194 | + self.finishPayCallBack?(self.orderInfoModel!, self.payType!, .success) | |
| 195 | +// NotificationCenter.default.post(name: <#T##NSNotification.Name#>, object: <#T##Any?#>)//kDSSuccessPayOrderNotification | |
| 196 | + }else{ | |
| 197 | + if lastCount > 0{ | |
| 198 | + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { | |
| 199 | + // 这里写你想要在 0.5 秒后执行的代码 | |
| 200 | + self.checkPayIsSuccessful(lastCount: lastCount-1) | |
| 201 | + } | |
| 202 | + } | |
| 203 | + } | |
| 204 | + } | |
| 51 | 205 | |
| 52 | 206 | } |
| 53 | 207 | |
| 208 | + // MARK: - UITableViewDelegate | |
| 209 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 210 | + 2 | |
| 211 | + } | |
| 212 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 213 | + if section == 0{ | |
| 214 | + return 1 | |
| 215 | + }else{ | |
| 216 | + return 2 | |
| 217 | + } | |
| 218 | + } | |
| 219 | + | |
| 220 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 221 | + if indexPath.section == 0{ | |
| 222 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveShopPayNeedPaymentCellIdentifier) as? CNLiveShopPayNeedPaymentCell | |
| 223 | + else { | |
| 224 | + let cell = CNLiveShopPayNeedPaymentCell() | |
| 225 | + return cell | |
| 226 | + } | |
| 227 | + let monStr = String(format: "需要付款: ¥%.2f", (Double(self.orderInfoModel?.totalMoney ?? "0.00") ?? 0.00) / 100) | |
| 228 | + let attribute = NSMutableAttributedString.init(string:monStr) | |
| 229 | + let attIndex = 6 | |
| 230 | + attribute.addAttributes([NSAttributedString.Key.foregroundColor: HexColor("#222222")!], range: NSRange.init(location: 0, length: attIndex)) | |
| 231 | + attribute.addAttributes([NSAttributedString.Key.foregroundColor: UIColor(red:0.29, green:0.64, blue:0.25, alpha:1.00)], range: NSRange.init(location: attIndex, length: monStr.count-attIndex)) | |
| 232 | + cell.titleLabel.attributedText = attribute | |
| 233 | + return cell | |
| 234 | + }else{ | |
| 235 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveShopPayWeChatAlipayCellIdentifier) as? CNLiveShopPayWeChatAlipayCell | |
| 236 | + else { | |
| 237 | + let cell = CNLiveShopPayWeChatAlipayCell() | |
| 238 | + return cell | |
| 239 | + } | |
| 240 | + if indexPath.row == 0{ | |
| 241 | + //微信支付 | |
| 242 | + cell.titleLabel.text = "微信支付" | |
| 243 | + cell.iconImgView.image = UIImage(named: "dd_weixin") | |
| 244 | + if self.currentSeleWechat == true{ | |
| 245 | + cell.selectImgView.isHidden = false | |
| 246 | + }else{ | |
| 247 | + cell.selectImgView.isHidden = true | |
| 248 | + } | |
| 249 | + }else{ | |
| 250 | + //支付宝支付 | |
| 251 | + cell.titleLabel.text = "支付宝支付" | |
| 252 | + cell.iconImgView.image = UIImage(named: "dd_zhifubao") | |
| 253 | + if self.currentSeleWechat == true{ | |
| 254 | + cell.selectImgView.isHidden = true | |
| 255 | + }else{ | |
| 256 | + cell.selectImgView.isHidden = false | |
| 257 | + } | |
| 258 | + } | |
| 259 | + return cell | |
| 260 | + } | |
| 261 | + } | |
| 262 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
| 263 | + if indexPath.section == 1{ | |
| 264 | + if indexPath.row == 0{ | |
| 265 | + if self.currentSeleWechat == true{ | |
| 266 | + return | |
| 267 | + } | |
| 268 | + self.currentSeleWechat = true | |
| 269 | + }else{ | |
| 270 | + if self.currentSeleWechat == false{ | |
| 271 | + return | |
| 272 | + } | |
| 273 | + self.currentSeleWechat = false | |
| 274 | + } | |
| 275 | + self.tableView.reloadData() | |
| 276 | + } | |
| 277 | + } | |
| 278 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 279 | + return 60 | |
| 280 | + } | |
| 54 | 281 | |
| 55 | 282 | } | ... | ... |
metaCode/Classes/Main/HomePage/Controller/WebController/CNWebView.swift
| ... | ... | @@ -31,9 +31,18 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 31 | 31 | return cnWebView |
| 32 | 32 | }() |
| 33 | 33 | |
| 34 | - var webUrl:URL?//初始URL | |
| 34 | + var _webUrl:URL?//初始URL | |
| 35 | + var webUrl:URL?{ | |
| 36 | + get{ | |
| 37 | + _webUrl | |
| 38 | + }set{ | |
| 39 | + _webUrl = newValue! | |
| 40 | + } | |
| 41 | + } | |
| 42 | + | |
| 35 | 43 | var currentUrl:String = ""//当前网页的url |
| 36 | 44 | var bridge:WKWebViewJavascriptBridge? |
| 45 | + var customUserAgent:String = "" | |
| 37 | 46 | |
| 38 | 47 | //CNWebController |
| 39 | 48 | var isCNWebController:Bool = false//是否网页控制器 |
| ... | ... | @@ -46,6 +55,12 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 46 | 55 | fatalError("init(coder:) has not been implemented") |
| 47 | 56 | } |
| 48 | 57 | |
| 58 | + func loadUrl(url:String){ | |
| 59 | + let urlStr = self.checkURLWithStr(urlStr: url) | |
| 60 | + self.currentUrl = urlStr | |
| 61 | + self.cnWebView.load(URLRequest.init(url:URL(string: urlStr)!)) | |
| 62 | + } | |
| 63 | + | |
| 49 | 64 | init(frame: CGRect, configuration: WKWebViewConfiguration ,url:URL?) { |
| 50 | 65 | super.init(frame: frame) |
| 51 | 66 | self.configuration = configuration |
| ... | ... | @@ -57,6 +72,7 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 57 | 72 | if !userAgent.contains(CNLiveMCEnvironmentManager.shared.base_web_UA) { |
| 58 | 73 | let newUserAgent = userAgent + CNLiveMCEnvironmentManager.shared.base_web_UA |
| 59 | 74 | self.cnWebView.customUserAgent = newUserAgent |
| 75 | + self.customUserAgent = newUserAgent | |
| 60 | 76 | |
| 61 | 77 | if (self.webUrl != nil){ |
| 62 | 78 | let urlStr = self.checkURLWithStr(urlStr: self.webUrl!.absoluteString) |
| ... | ... | @@ -66,12 +82,6 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 66 | 82 | self.configBridge() |
| 67 | 83 | self.configBridgeRegister() |
| 68 | 84 | self.webViewAddScriptMessageHandler() |
| 69 | -// if URL(string: urlStr)?.host == WjjH5 { | |
| 70 | -// self.configBridgeRegister() | |
| 71 | -// | |
| 72 | -// }else if URL(string: urlStr)?.host == ManageshopH5 || URL(string: urlStr)?.host == ManagemallshopH5{ | |
| 73 | -// self.webViewAddScriptMessageHandler() | |
| 74 | -// } | |
| 75 | 85 | } |
| 76 | 86 | } |
| 77 | 87 | } |
| ... | ... | @@ -120,12 +130,18 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 120 | 130 | // 获取 payModel,如果不存在或者不是字符串类型,则使用默认值 "2" |
| 121 | 131 | // let payModel = (json["payModel"] as? String) ?? "2" |
| 122 | 132 | // 现在你可以使用 orderNumber 和 payModel 进行后续操作 |
| 123 | - print("orderNumber: \(orderNumber)") | |
| 124 | 133 | let vc = CNLiveShopPayController(orderNumber: orderNumber) |
| 125 | - vc.finishPayCallBack = { [weak self] testStr in | |
| 126 | - print(testStr) | |
| 127 | - self?.cnWebView.evaluateJavaScript(String(format: "appPaymentCallback('%@')", <#T##arguments: CVarArg...##CVarArg#>), completionHandler: { result, error in | |
| 128 | - | |
| 134 | + vc.finishPayCallBack = { [weak self] orderInfoModel ,payType ,payResult in | |
| 135 | + let params = NSDictionary() | |
| 136 | + params.setValue(orderInfoModel.toJSONString() ?? "", forKey: "orderInfo") | |
| 137 | + params.setValue(payType.hashValue, forKey: "payType") | |
| 138 | + params.setValue(payResult.hashValue, forKey: "payResult") | |
| 139 | + | |
| 140 | + let sparams = params.jsonString() | |
| 141 | + let appPaymentCallbackJS = String(format: "appPaymentCallback('%@')", sparams ?? "") | |
| 142 | + | |
| 143 | + self?.cnWebView.evaluateJavaScript(appPaymentCallbackJS, completionHandler: { result, error in | |
| 144 | + print("22222222appPaymentCallbackJS:\(result)") | |
| 129 | 145 | }) |
| 130 | 146 | } |
| 131 | 147 | // 跳转支付页面 | ... | ... |
metaCode/Classes/Main/HomePage/View/Shop/Shoph5Pay/CNLiveShopPayNeedPaymentCell.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveShopPayNeedPaymentCell.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2024/4/10. | |
| 6 | +// 电商h5支付 需要付款cell | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +class CNLiveShopPayNeedPaymentCell:UITableViewCell{ | |
| 11 | + | |
| 12 | + lazy var titleLabel: UILabel = { | |
| 13 | + let titleLabel = UILabel.init(frame: CGRectMake(10, 0, KSreenWidth-20, 60)) | |
| 14 | + titleLabel.textColor = UIColor(red:0.25, green:0.23, blue:0.28, alpha:1.00) | |
| 15 | + titleLabel.textAlignment = .left | |
| 16 | + titleLabel.font = Font_16 | |
| 17 | + titleLabel.adjustsFontSizeToFitWidth=true | |
| 18 | + return titleLabel | |
| 19 | + }() | |
| 20 | + | |
| 21 | + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | |
| 22 | + super.init(style: style, reuseIdentifier: reuseIdentifier) | |
| 23 | + self.selectionStyle = .none | |
| 24 | + self.initUI() | |
| 25 | + } | |
| 26 | + | |
| 27 | + required init?(coder: NSCoder) { | |
| 28 | + fatalError("init(coder:) has not been implemented") | |
| 29 | + } | |
| 30 | + | |
| 31 | + // MARK: - initUI | |
| 32 | + func initUI(){ | |
| 33 | + self.contentView.addSubview(self.titleLabel) | |
| 34 | + } | |
| 35 | +} | |
| 36 | + | ... | ... |
metaCode/Classes/Main/HomePage/View/Shop/Shoph5Pay/CNLiveShopPayWeChatAlipayCell.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveShopPayWeChatAlipayCell.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2024/4/10. | |
| 6 | +// 电商h5支付 微信支付宝cell | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +import SnapKit | |
| 10 | + | |
| 11 | +class CNLiveShopPayWeChatAlipayCell:UITableViewCell{ | |
| 12 | + | |
| 13 | + lazy var selectImgView :UIImageView = { | |
| 14 | + let selectImgView = UIImageView(image: UIImage(named: "tsq_xz")) | |
| 15 | + return selectImgView | |
| 16 | + }() | |
| 17 | + | |
| 18 | + lazy var iconImgView :UIImageView = { | |
| 19 | + let iconImgView = UIImageView() | |
| 20 | + return iconImgView | |
| 21 | + }() | |
| 22 | + | |
| 23 | + lazy var titleLabel: UILabel = { | |
| 24 | + let titleLabel = UILabel.init(frame: CGRectZero) | |
| 25 | + titleLabel.textColor = UIColor(red:0.04, green:0.02, blue:0.07, alpha:1.00) | |
| 26 | + titleLabel.textAlignment = .left | |
| 27 | + titleLabel.font = BoldFont_16 | |
| 28 | + titleLabel.adjustsFontSizeToFitWidth=true | |
| 29 | + return titleLabel | |
| 30 | + }() | |
| 31 | + | |
| 32 | + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | |
| 33 | + super.init(style: style, reuseIdentifier: reuseIdentifier) | |
| 34 | + self.selectionStyle = .none | |
| 35 | + self.initUI() | |
| 36 | + self.layout() | |
| 37 | + } | |
| 38 | + | |
| 39 | + required init?(coder: NSCoder) { | |
| 40 | + fatalError("init(coder:) has not been implemented") | |
| 41 | + } | |
| 42 | + | |
| 43 | + // MARK: - initUI | |
| 44 | + func initUI(){ | |
| 45 | + self.contentView.addSubview(self.titleLabel) | |
| 46 | + self.contentView.addSubview(self.iconImgView) | |
| 47 | + self.contentView.addSubview(self.selectImgView) | |
| 48 | + self.selectImgView.isHidden = true | |
| 49 | + } | |
| 50 | + func layout(){ | |
| 51 | + self.iconImgView.snp.makeConstraints { make in | |
| 52 | + make.left.equalToSuperview().offset(10) | |
| 53 | + make.centerY.equalToSuperview() | |
| 54 | + } | |
| 55 | + self.titleLabel.snp.makeConstraints { make in | |
| 56 | + make.left.equalTo(self.iconImgView.snp.right).offset(20) | |
| 57 | + make.centerY.equalToSuperview() | |
| 58 | + } | |
| 59 | + self.selectImgView.snp.makeConstraints { make in | |
| 60 | + make.right.equalToSuperview().offset(-30) | |
| 61 | + make.centerY.equalToSuperview() | |
| 62 | + } | |
| 63 | + } | |
| 64 | +} | ... | ... |
metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideView.swift
| ... | ... | @@ -96,6 +96,9 @@ class CNDownSlideView:UIView{ |
| 96 | 96 | if(type == UpDownTypeH5){ |
| 97 | 97 | if _downPath?.count ?? 0 > 0{ |
| 98 | 98 | self.addSubview(self.webView) |
| 99 | + if self.webView.cnWebView.url?.absoluteString.contains(_downPath) == false && self.webView.cnWebView.url != nil{ | |
| 100 | + self.webView.loadUrl(url: _downPath!) | |
| 101 | + } | |
| 99 | 102 | } |
| 100 | 103 | }else if(type == UpDownTypePage){ |
| 101 | 104 | self.addSubview(self.upSlideVC.view) | ... | ... |
metaCode/Classes/Main/HomePage/View/VerticalViews/UpSlide/CNUpSlideView.swift
| ... | ... | @@ -29,13 +29,13 @@ class CNUpSlideView:UIView{ |
| 29 | 29 | configuration.userContentController = WKUserContentController() |
| 30 | 30 | |
| 31 | 31 | var url:URL? |
| 32 | - if (_downPath != ""){ | |
| 33 | - url = URL.init(string: "https://managemall.cnlive.com/html/mall/1/#/pages/main/goodsList/goodsList?scene=app")//_downPath!)// | |
| 32 | + if (self.downPath != ""){ | |
| 33 | + url = URL.init(string: _downPath!)//"https://managemall.cnlive.com/html/mall/1/#/pages/main/goodsList/goodsList?scene=app")// | |
| 34 | 34 | }else{ |
| 35 | 35 | url = nil |
| 36 | 36 | } |
| 37 | - let webView = CNWebView(frame: CGRectMake(10, KNavigationHeight+KStatusBarHeight+10, self.width - 20, self.height-KNavigationHeight-KStatusBarHeight-10), configuration: configuration,url: url) | |
| 38 | 37 | |
| 38 | + let webView = CNWebView(frame: CGRectMake(10, KNavigationHeight+KStatusBarHeight+10, KSreenWidth - 20, KSreenHeight-KNavigationHeight-KStatusBarHeight-10), configuration: configuration,url: url) | |
| 39 | 39 | webView.cnWebView.scrollView.showsVerticalScrollIndicator = false |
| 40 | 40 | webView.cnWebView.scrollView.showsHorizontalScrollIndicator = false |
| 41 | 41 | webView.cnWebView.backgroundColor = .clear |
| ... | ... | @@ -78,9 +78,14 @@ class CNUpSlideView:UIView{ |
| 78 | 78 | view.removeFromSuperview() |
| 79 | 79 | } |
| 80 | 80 | if(type == UpDownTypeH5){ |
| 81 | - self.addSubview(self.webView) | |
| 82 | - } | |
| 83 | - else if(type == UpDownTypePage){ | |
| 81 | +// _downPath = "https://manageshop.cnlive.com/html/mall/1/#/pages/main/detail/detail?id=9526907&share_mold=shop&share_uid=c7KtcyWyXy7yMGCUPWuaUQ%3D%3D&shop_type=f8Ug%2BT1YxNKjy5QcYX4XlQ%3D%3D&shop_to=HNWMXVEMCtRetyucYELQtqg80ZoCVAAx%2B2jJIJuozJLTuJhb2vXeootObdZsz43yjHZNxKqF0WsT9mICYb0zHjo4STMRuQrSWYMkFzT4EQlgQS1%2BX%2FeCQ0jmkT2n4aZ9bShTP%2BB3nLDm%2BfHeBnfRpIEuEl3l9sXHnXc4p%2BcxciI%3D&shop_shop_type=f8Ug%2BT1YxNKjy5QcYX4XlQ%3D%3D&mall_share_type=2&price=0.01&originalPrice=0.00&shopShareType=1&wjjshopType=cnliveShopCar" | |
| 82 | + if _downPath?.count ?? 0 > 0{ | |
| 83 | + self.addSubview(self.webView) | |
| 84 | + if self.webView.cnWebView.url?.absoluteString.contains(_downPath) == false && self.webView.cnWebView.url != nil{ | |
| 85 | + self.webView.loadUrl(url: _downPath!) | |
| 86 | + } | |
| 87 | + } | |
| 88 | + }else if(type == UpDownTypePage){ | |
| 84 | 89 | |
| 85 | 90 | }else if(type == UpDownTypeShopDetail){ |
| 86 | 91 | currentViewController()?.addChild(self.upSlideVC)//看行不行 | ... | ... |
metaCode/Classes/Main/HomePage/ViewModel/CNLiveShoph5ViewModel.swift
| ... | ... | @@ -68,4 +68,34 @@ class CNLiveShoph5ViewModel:NSObject{ |
| 68 | 68 | } |
| 69 | 69 | } |
| 70 | 70 | |
| 71 | + /** | |
| 72 | + 请求订单是否支付成功 | |
| 73 | + | |
| 74 | + @param orderId 订单号 | |
| 75 | + @param result 结果 //dic: NSString * score, NSString * desc | |
| 76 | + */ | |
| 77 | + static func postIsOrderPayWithOrderId(orderId:String,resultBlock: @escaping downSlideResultBlock) { | |
| 78 | + | |
| 79 | + let param = NSMutableDictionary() | |
| 80 | + param.setValue(orderId, forKey: "orderId") | |
| 81 | + | |
| 82 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 83 | + CNLiveNetworking.setupShowDataResult(false) | |
| 84 | + CNLiveNetworking.setupDSRequest(true) | |
| 85 | + let custom_param = NSMutableDictionary() | |
| 86 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj, forKey: "appId") | |
| 87 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey_wjj, forKey: "appKey") | |
| 88 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 89 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseWjjShopUrl+"/Api/Index3/isOrderPay", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 90 | + hiddenLoading() | |
| 91 | + let resp = result as! NSDictionary | |
| 92 | + let dataDic = resp["data"] as! NSDictionary | |
| 93 | + let code = resp["code"] as? String | |
| 94 | + if (code == "200") { | |
| 95 | + resultBlock(dataDic,.success) | |
| 96 | + }else{ | |
| 97 | + resultBlock(NSNull(),.failed) | |
| 98 | + } | |
| 99 | + } | |
| 100 | + } | |
| 71 | 101 | } | ... | ... |
metaCode/Supporting Files/Assets.xcassets/Shoph5/Contents.json
0 → 100644
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_weixin.imageset/Contents.json
0 → 100644
| 1 | +{ | |
| 2 | + "images" : [ | |
| 3 | + { | |
| 4 | + "idiom" : "universal", | |
| 5 | + "scale" : "1x" | |
| 6 | + }, | |
| 7 | + { | |
| 8 | + "filename" : "dd_weixin@2x.png", | |
| 9 | + "idiom" : "universal", | |
| 10 | + "scale" : "2x" | |
| 11 | + }, | |
| 12 | + { | |
| 13 | + "filename" : "dd_weixin@3x.png", | |
| 14 | + "idiom" : "universal", | |
| 15 | + "scale" : "3x" | |
| 16 | + } | |
| 17 | + ], | |
| 18 | + "info" : { | |
| 19 | + "author" : "xcode", | |
| 20 | + "version" : 1 | |
| 21 | + } | |
| 22 | +} | ... | ... |
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_weixin.imageset/dd_weixin@2x.png
0 → 100644
1.89 KB
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_weixin.imageset/dd_weixin@3x.png
0 → 100644
2.46 KB
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_zhifubao.imageset/Contents.json
0 → 100644
| 1 | +{ | |
| 2 | + "images" : [ | |
| 3 | + { | |
| 4 | + "idiom" : "universal", | |
| 5 | + "scale" : "1x" | |
| 6 | + }, | |
| 7 | + { | |
| 8 | + "filename" : "dd_zhifubao@2x.png", | |
| 9 | + "idiom" : "universal", | |
| 10 | + "scale" : "2x" | |
| 11 | + }, | |
| 12 | + { | |
| 13 | + "filename" : "dd_zhifubao@3x.png", | |
| 14 | + "idiom" : "universal", | |
| 15 | + "scale" : "3x" | |
| 16 | + } | |
| 17 | + ], | |
| 18 | + "info" : { | |
| 19 | + "author" : "xcode", | |
| 20 | + "version" : 1 | |
| 21 | + } | |
| 22 | +} | ... | ... |
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_zhifubao.imageset/dd_zhifubao@2x.png
0 → 100644
1.9 KB
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_zhifubao.imageset/dd_zhifubao@3x.png
0 → 100644
2.38 KB
metaCode/Supporting Files/Assets.xcassets/Shoph5/tsq_xz.imageset/Contents.json
0 → 100644
| 1 | +{ | |
| 2 | + "images" : [ | |
| 3 | + { | |
| 4 | + "idiom" : "universal", | |
| 5 | + "scale" : "1x" | |
| 6 | + }, | |
| 7 | + { | |
| 8 | + "filename" : "tsq_xz@2x.png", | |
| 9 | + "idiom" : "universal", | |
| 10 | + "scale" : "2x" | |
| 11 | + }, | |
| 12 | + { | |
| 13 | + "filename" : "tsq_xz@3x.png", | |
| 14 | + "idiom" : "universal", | |
| 15 | + "scale" : "3x" | |
| 16 | + } | |
| 17 | + ], | |
| 18 | + "info" : { | |
| 19 | + "author" : "xcode", | |
| 20 | + "version" : 1 | |
| 21 | + } | |
| 22 | +} | ... | ... |
metaCode/Supporting Files/Assets.xcassets/Shoph5/tsq_xz.imageset/tsq_xz@2x.png
0 → 100644
1.5 KB
metaCode/Supporting Files/Assets.xcassets/Shoph5/tsq_xz.imageset/tsq_xz@3x.png
0 → 100644
1.83 KB