RegisterLoginViewController.swift 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. //
  2. // RegisterLoginViewController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/3/22.
  6. // Copyright © 2019 南鑫林. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftyMediator
  10. import SwiftyJSON
  11. class RegisterLoginViewController: BaseViewController {
  12. override func didReceiveMemoryWarning() {
  13. super.didReceiveMemoryWarning()
  14. }
  15. deinit {
  16. NXLLog("deinit")
  17. NotificationCenter.default.removeObserver(self)
  18. }
  19. override func viewDidLoad() {
  20. super.viewDidLoad()
  21. setupViews()
  22. setupLayouts()
  23. setupData()
  24. }
  25. override func setupViews() {
  26. navigationBar.wr_setBackgroundAlpha(alpha: 0)
  27. navigationBar.wr_setBottomLineHidden(hidden: true)
  28. navigationBar.wr_setLeftButton(image: kImage(name: "nav_close_white")!)
  29. statusBarStyle = .lightContent
  30. view.addSubview(playerView)
  31. view.addSubview(bgView)
  32. view.addSubview(iconImageView)
  33. view.addSubview(oneBuiltLoginButton)
  34. view.addSubview(mobileLoginButton)
  35. view.addSubview(weixinLoginButton)
  36. view.addSubview(QQLoginButton)
  37. view.addSubview(agreementLabel)
  38. view.addSubview(agreementButton)
  39. view.insertSubview(navigationBar, aboveSubview: playerView)
  40. view.insertSubview(navigationBar, aboveSubview: bgView)
  41. }
  42. override func setupLayouts() {
  43. playerView.snp.makeConstraints { (make) in
  44. make.edges.equalToSuperview()
  45. }
  46. bgView.snp.makeConstraints { (make) in
  47. make.edges.equalToSuperview()
  48. }
  49. iconImageView.snp.makeConstraints { (make) in
  50. make.centerX.equalToSuperview()
  51. make.top.equalTo(56 + kNavBarTotalHeight)
  52. }
  53. oneBuiltLoginButton.snp.makeConstraints { (make) in
  54. make.bottom.equalTo(mobileLoginButton.snp.top).offset(-15)
  55. make.left.equalTo(30)
  56. make.right.equalTo(-30)
  57. make.height.equalTo(48)
  58. }
  59. oneBuiltLoginButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 5)
  60. mobileLoginButton.snp.makeConstraints { (make) in
  61. make.bottom.equalTo(QQLoginButton.snp.top).offset(-20)
  62. make.left.equalTo(30)
  63. make.right.equalTo(-30)
  64. make.height.equalTo(48)
  65. }
  66. mobileLoginButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.left, imageTitleSpace: 5)
  67. weixinLoginButton.snp.makeConstraints { (make) in
  68. make.bottom.equalTo(agreementLabel.snp.top).offset(-15)
  69. make.centerX.equalToSuperview().offset(-30)
  70. }
  71. QQLoginButton.snp.makeConstraints { (make) in
  72. make.bottom.equalTo(agreementLabel.snp.top).offset(-15)
  73. make.centerX.equalToSuperview().offset(30)
  74. }
  75. agreementLabel.snp.makeConstraints { (make) in
  76. make.bottom.equalTo(-(kSafeTabBarHeight+20))
  77. make.centerX.equalToSuperview().offset(10)
  78. }
  79. agreementButton.snp.makeConstraints { (make) in
  80. make.right.equalTo(agreementLabel.snp.left).offset(-5)
  81. make.centerY.equalTo(agreementLabel)
  82. make.size.equalTo(15)
  83. }
  84. }
  85. override func setupData() {
  86. player.play()
  87. if (UMSocialManager.default()?.isInstall(.wechatSession) ?? true) { //验证
  88. weixinLoginButton.isHidden = false
  89. weixinLoginButton.snp.updateConstraints { (make) in
  90. make.centerX.equalToSuperview().offset(-30)
  91. }
  92. QQLoginButton.snp.updateConstraints { (make) in
  93. make.centerX.equalToSuperview().offset(30)
  94. }
  95. }else {
  96. weixinLoginButton.isHidden = true
  97. QQLoginButton.snp.updateConstraints { (make) in
  98. make.centerX.equalToSuperview()
  99. }
  100. }
  101. agreementLabel.addClickText("由你用户协议", attributeds: [NSAttributedString.Key.font:kRegularFont13 as Any,NSAttributedString.Key.foregroundColor:kffffffColor,NSAttributedString.Key.underlineStyle:NSUnderlineStyle.single.rawValue,NSAttributedString.Key.underlineColor:kffffffColor], transmitBody: nil) {
  102. (data) in
  103. Mediator.push(H5RouterModuleType.pushContentId6)
  104. }
  105. agreementLabel.addClickText("隐私条款", attributeds: [NSAttributedString.Key.font:kRegularFont13 as Any,NSAttributedString.Key.foregroundColor:kffffffColor,NSAttributedString.Key.underlineStyle:NSUnderlineStyle.single.rawValue,NSAttributedString.Key.underlineColor:kffffffColor], transmitBody: nil) {
  106. (data) in
  107. Mediator.push(H5RouterModuleType.pushContentId11)
  108. }
  109. navigationBar.onClickLeftButton = {
  110. [weak self] in
  111. //移除本地用户信息
  112. UserModel.shared().removeLoginModel()
  113. self?.navigationController?.dismiss(animated: true, completion: nil)
  114. }
  115. //一键登录
  116. weak var weakSelf = self
  117. oneBuiltLoginButton.rx.tap.subscribe(onNext: {[weak self] _ in
  118. if (self?.agreementButton.isSelected)! {
  119. ATAuthSDKManager.oneBuiltLogin(vc:weakSelf)
  120. }else {
  121. SwiftProgressHUD.shared().showText("请您先同意用户协议")
  122. }
  123. }).disposed(by: disposeBag)
  124. // 手机验证码或密码登录
  125. mobileLoginButton.rx.tap.subscribe(onNext: { [weak self] in
  126. if (self?.agreementButton.isSelected)! {
  127. self?.navigationController?.pushViewController(MobileLoginViewController(), animated: true)
  128. }else {
  129. SwiftProgressHUD.shared().showText("请您先同意用户协议")
  130. }
  131. }).disposed(by: disposeBag)
  132. //微信登录
  133. weixinLoginButton.rx.tap.subscribe(onNext: { [weak self] in
  134. self?.tripartiteLogin(platformType: UMSocialPlatformType.wechatSession, loginType: LoginType.weixin)
  135. }).disposed(by: disposeBag)
  136. //QQ登录
  137. QQLoginButton.rx.tap.subscribe(onNext: { [weak self] in
  138. self?.tripartiteLogin(platformType: UMSocialPlatformType.QQ, loginType: LoginType.qq)
  139. }).disposed(by: disposeBag)
  140. agreementButton.rx.tap.subscribe(onNext: { [weak self] in
  141. self?.agreementButton.isSelected = !(self?.agreementButton.isSelected)!
  142. }).disposed(by: disposeBag)
  143. }
  144. private lazy var bgView: UIView = {
  145. let bgView = UIView()
  146. bgView.backgroundColor = UIColor(white: 0, alpha: 0.68)
  147. return bgView
  148. }()
  149. private lazy var iconImageView: UIImageView = {
  150. let iconImageView = UIImageView()
  151. iconImageView.image = kImage(name: "logo_slogan")
  152. return iconImageView
  153. }()
  154. private lazy var oneBuiltLoginButton: UIButton = {
  155. let oneBuiltLoginButton = UIButton(type: UIButton.ButtonType.custom)
  156. oneBuiltLoginButton.setTitle("手机号码一键登录", for: UIControl.State.normal)
  157. oneBuiltLoginButton.setTitleColor(k333333Color, for: UIControl.State.normal)
  158. oneBuiltLoginButton.titleLabel?.font = kMediumFont16
  159. oneBuiltLoginButton.setImage(kImage(name: "login_ico_iphone"), for: UIControl.State.normal)
  160. oneBuiltLoginButton.setBackgroundImage(UIImage.imageWithColor(color: kffffffColor), for: UIControl.State.normal)
  161. oneBuiltLoginButton.layer.cornerRadius = 24
  162. oneBuiltLoginButton.layer.masksToBounds = true
  163. // if #available(iOS 13.0, *) {
  164. // oneBuiltLoginButton.isHidden = true
  165. // }
  166. return oneBuiltLoginButton
  167. }()
  168. private lazy var mobileLoginButton: UIButton = {
  169. let mobileLoginButton = UIButton(type: UIButton.ButtonType.custom)
  170. mobileLoginButton.setTitle("手机验证码或密码登录", for: UIControl.State.normal)
  171. mobileLoginButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  172. mobileLoginButton.titleLabel?.font = kMediumFont16
  173. mobileLoginButton.setImage(kImage(name: "login_ico_password"), for: UIControl.State.normal)
  174. mobileLoginButton.setBackgroundImage(UIImage.imageWithColor(color: kffffffColor.withAlphaComponent(0.52)), for: UIControl.State.normal)
  175. mobileLoginButton.cornerRadius = 24
  176. mobileLoginButton.masksToBounds = true
  177. return mobileLoginButton
  178. }()
  179. private lazy var weixinLoginButton: UIButton = {
  180. let weixinLoginButton = UIButton(type: UIButton.ButtonType.custom)
  181. weixinLoginButton.setImage(kImage(name: "login_ico_wehcat"), for: UIControl.State.normal)
  182. return weixinLoginButton
  183. }()
  184. private lazy var QQLoginButton: UIButton = {
  185. let QQLoginButton = UIButton(type: UIButton.ButtonType.custom)
  186. QQLoginButton.setImage(kImage(name: "login_ico_qq"), for: UIControl.State.normal)
  187. return QQLoginButton
  188. }()
  189. private lazy var agreementLabel: FMLinkLabel = {
  190. let agreementLabel = FMLinkLabel()
  191. agreementLabel.numberOfLines = 0
  192. agreementLabel.textColor = kbbbbbbColor
  193. agreementLabel.font = kRegularFont12
  194. agreementLabel.isUserInteractionEnabled = true
  195. agreementLabel.text = "登录即表示你已阅读并同意 由你用户协议 和 隐私条款"
  196. agreementLabel.textAlignment = .center
  197. return agreementLabel
  198. }()
  199. private lazy var agreementButton: UIButton = {
  200. let agreementButton = UIButton(type: UIButton.ButtonType.custom)
  201. agreementButton.isSelected = true
  202. agreementButton.setImage(kImage(name: "icon_check"), for: UIControl.State.selected)
  203. agreementButton.setImage(kImage(name: "icon_uncheck"), for: UIControl.State.normal)
  204. return agreementButton
  205. }()
  206. private lazy var playerView: UIView = {
  207. let playerView = UIView()
  208. return playerView
  209. }()
  210. private lazy var player: AVPlayer = {
  211. //定义一个视频文件路径
  212. let filePath = Bundle.main.path(forResource: "login_video", ofType: "mp4")
  213. let videoURL = URL(fileURLWithPath: filePath!)
  214. //定义一个playerItem,并监听相关的通知
  215. let playerItem = AVPlayerItem(url: videoURL)
  216. NotificationCenter.default.addObserver(self,
  217. selector: #selector(playerDidFinishPlaying),
  218. name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
  219. object: playerItem)
  220. let player = AVPlayer(playerItem: playerItem)
  221. //设置大小和位置(全屏)
  222. let playerLayer = AVPlayerLayer(player: player)
  223. playerLayer.frame = self.view.bounds
  224. playerLayer.videoGravity = .resizeAspectFill
  225. //添加到界面上
  226. playerView.layer.addSublayer(playerLayer)
  227. return player
  228. }()
  229. @objc func playerDidFinishPlaying(notification:Notification) {
  230. player.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero) {[weak self] (finished) in
  231. self?.player.play()
  232. }
  233. }
  234. //第三方登录
  235. func tripartiteLogin(platformType:UMSocialPlatformType,loginType:LoginType) {
  236. if self.agreementButton.isSelected {
  237. UMManager.shared.loginGetUserInfo(platformType: platformType, currentViewController: self) {
  238. [weak self] (userModel) -> (Void) in
  239. let wxLoginModel = userModel
  240. SwiftMoyaNetWorkServiceUser.shared().userTripartiteRegisterTLoginApi(loginType:loginType,open_id: wxLoginModel.open_id, union_id: wxLoginModel.union_id, avatar: wxLoginModel.avatar, username: wxLoginModel.username, gender: wxLoginModel.gender, completion: {
  241. [weak self] (userModel) -> (Void) in
  242. let userModel = userModel as! UserModel
  243. if (userModel.mobile != nil && userModel.mobile != "" ) {
  244. UserModel.shared().setModel(model: userModel)
  245. RegisterLoginManager.registerLoginSuccessApi(vc: self)
  246. }else {
  247. if loginType == .qq {
  248. Mediator.push(RegisterLoginRouterModuleType.pushBindPhoneNumber(bindPhoneNumberVCType: .qqLogin, userModel: userModel))
  249. }
  250. if loginType == .weixin {
  251. Mediator.push(RegisterLoginRouterModuleType.pushBindPhoneNumber(bindPhoneNumberVCType: .weixinlogin, userModel: userModel))
  252. }
  253. }
  254. })
  255. }
  256. }else {
  257. SwiftProgressHUD.shared().showText("请您先同意用户协议")
  258. }
  259. }
  260. }