Advertisement
Guest User

Untitled

a guest
Apr 18th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.72 KB | None | 0 0
  1. //
  2. // LoginController.swift
  3. // SnapMessage
  4. //
  5. // Created by Shan Lin on 4/18/17.
  6. // Copyright © 2017 Shan Lin. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import Firebase
  11.  
  12. class LoginController: UIViewController
  13. {
  14. // Input Container
  15. let inputsContainerView: UIView =
  16. {
  17. let view = UIView()
  18. view.backgroundColor = UIColor.white
  19. view.translatesAutoresizingMaskIntoConstraints = false
  20. view.layer.cornerRadius = 5
  21. view.layer.masksToBounds = true
  22.  
  23. return view
  24. }()
  25.  
  26. // Login Reg Button
  27. lazy var loginRegisterButton: UIButton =
  28. {
  29. let button = UIButton(type: .system)
  30. button.backgroundColor = UIColor.gray
  31. button.setTitle("Register", for: .normal)
  32. button.translatesAutoresizingMaskIntoConstraints = false
  33. button.setTitleColor(UIColor.white, for: .normal)
  34. button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16)
  35.  
  36. button.addTarget(self, action: #selector(handleRegister), for: .touchUpInside)
  37.  
  38. return button
  39. }()
  40.  
  41. func handleRegister()
  42. {
  43. guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text else
  44. {
  45. print("form is not valid")
  46. return
  47. }
  48.  
  49. FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user: FIRUser?, error) in
  50. if error != nil
  51. {
  52. print(error!)
  53. return
  54. }
  55.  
  56. // user auth success
  57. guard let uid = user?.uid else
  58. {
  59. return
  60. }
  61. let ref = FIRDatabase.database().reference(fromURL: "https://snapmessage-db1ed.firebaseio.com/")
  62. let usersReference = ref.child("users").child(uid)
  63.  
  64. let values = ["name" : name, "email" : email]
  65. usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
  66. if err != nil
  67. {
  68. print(err!)
  69. return
  70. }
  71. print("user save to db success")
  72. })
  73. })
  74. print("Register")
  75. }
  76.  
  77. // Name
  78. let nameTextField: UITextField =
  79. {
  80. let tf = UITextField()
  81. tf.placeholder = "Name"
  82. tf.translatesAutoresizingMaskIntoConstraints = false
  83.  
  84. return tf
  85. }()
  86.  
  87. let nameSeparatorView: UIView =
  88. {
  89. let view = UIView()
  90. view.backgroundColor = UIColor.lightGray
  91. view.translatesAutoresizingMaskIntoConstraints = false
  92.  
  93. return view
  94. }()
  95.  
  96. // Email
  97. let emailTextField: UITextField =
  98. {
  99. let tf = UITextField()
  100. tf.placeholder = "Email"
  101. tf.translatesAutoresizingMaskIntoConstraints = false
  102. tf.autocapitalizationType = UITextAutocapitalizationType.none
  103.  
  104. return tf
  105. }()
  106.  
  107. let emailSeparatorView: UIView =
  108. {
  109. let view = UIView()
  110. view.backgroundColor = UIColor.lightGray
  111. view.translatesAutoresizingMaskIntoConstraints = false
  112.  
  113. return view
  114. }()
  115.  
  116. // Password
  117. let passwordTextField: UITextField =
  118. {
  119. let tf = UITextField()
  120. tf.placeholder = "Password"
  121. tf.translatesAutoresizingMaskIntoConstraints = false
  122. tf.isSecureTextEntry = true
  123.  
  124. return tf
  125. }()
  126.  
  127. let profileImageView: UIImageView =
  128. {
  129. let imageView = UIImageView()
  130. imageView.image = UIImage(named: "sm")
  131. imageView.translatesAutoresizingMaskIntoConstraints = false
  132. imageView.contentMode = .scaleAspectFill
  133.  
  134. return imageView
  135. }()
  136.  
  137. lazy var loginRegisterSegmentedControl: UISegmentedControl =
  138. {
  139. let sc = UISegmentedControl(items: ["Login", "Register"])
  140. sc.translatesAutoresizingMaskIntoConstraints = false
  141. sc.tintColor = UIColor.white
  142. sc.selectedSegmentIndex = 1
  143. sc.addTarget(self, action: #selector(handleLoginRegisterChange), for: .valueChanged)
  144.  
  145. return sc
  146. }()
  147.  
  148. func handleLoginRegisterChange()
  149. {
  150. let title = loginRegisterSegmentedControl.titleForSegment(at: loginRegisterSegmentedControl.selectedSegmentIndex)
  151. loginRegisterButton.setTitle(title, for: .normal)
  152.  
  153. // change height of input container
  154. if loginRegisterSegmentedControl.selectedSegmentIndex == 0
  155. {
  156. inputsContainerViewHeightAnchor?.constant = 100
  157.  
  158. // change nametext height
  159. nameTextFieldHeightAnchor?.isActive = false
  160. nameTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 0)
  161. nameTextField.isHidden = true
  162. nameTextFieldHeightAnchor?.isActive = true
  163.  
  164. emailTextFieldHeightAnchor?.isActive = false
  165. emailTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/2)
  166. emailTextFieldHeightAnchor?.isActive = true
  167.  
  168. passwordTextFieldHeightAnchor?.isActive = false
  169. passwordTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/2)
  170. passwordTextFieldHeightAnchor?.isActive = true
  171. }
  172. else
  173. {
  174. inputsContainerViewHeightAnchor?.constant = 150
  175. // change nametext height
  176. nameTextFieldHeightAnchor?.isActive = false
  177. nameTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
  178. nameTextField.isHidden = false
  179. nameTextFieldHeightAnchor?.isActive = true
  180.  
  181. emailTextFieldHeightAnchor?.isActive = false
  182. emailTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
  183. emailTextFieldHeightAnchor?.isActive = true
  184.  
  185. passwordTextFieldHeightAnchor?.isActive = false
  186. passwordTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
  187. passwordTextFieldHeightAnchor?.isActive = true
  188. }
  189. print("!!!!!")
  190. print(inputsContainerViewHeightAnchor?.constant)
  191.  
  192. }
  193.  
  194. override func viewDidLoad()
  195. {
  196. super.viewDidLoad()
  197.  
  198. // view.backgroundColor = UIColor(r:100, g: 100, b: 100)
  199. view.backgroundColor = UIColor.lightGray
  200.  
  201. view.addSubview(inputsContainerView)
  202. view.addSubview(loginRegisterButton)
  203. view.addSubview(profileImageView)
  204. view.addSubview(loginRegisterSegmentedControl)
  205.  
  206. setupInputsContainerView()
  207. setupLoginRegisterButton()
  208. setupProfileImageView()
  209. setUpLoginRegisterSegmentedControl()
  210.  
  211.  
  212. }
  213.  
  214. func setUpLoginRegisterSegmentedControl()
  215. {
  216. // need x, y, width, height constraint
  217. loginRegisterSegmentedControl.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
  218. loginRegisterSegmentedControl.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor, constant: -12).isActive = true
  219. loginRegisterSegmentedControl.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  220. loginRegisterSegmentedControl.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3).isActive = true
  221. }
  222.  
  223. func setupProfileImageView()
  224. {
  225. // need x, y, width, height constraint
  226. profileImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
  227. profileImageView.bottomAnchor.constraint(equalTo: loginRegisterSegmentedControl.topAnchor, constant: -12).isActive = true
  228. profileImageView.widthAnchor.constraint(equalToConstant: 150).isActive = true
  229. profileImageView.heightAnchor.constraint(equalToConstant: 150).isActive = true
  230. }
  231.  
  232. var inputsContainerViewHeightAnchor: NSLayoutConstraint?
  233. var nameTextFieldHeightAnchor: NSLayoutConstraint?
  234. var emailTextFieldHeightAnchor: NSLayoutConstraint?
  235. var passwordTextFieldHeightAnchor: NSLayoutConstraint?
  236.  
  237. func setupInputsContainerView()
  238. {
  239. // need x, y, width, height constraint
  240. inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
  241. inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
  242. inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
  243.  
  244. inputsContainerViewHeightAnchor = inputsContainerView.heightAnchor.constraint(equalToConstant: 150)
  245. inputsContainerViewHeightAnchor?.isActive = true
  246.  
  247. inputsContainerView.addSubview(nameTextField)
  248. inputsContainerView.addSubview(nameSeparatorView)
  249. inputsContainerView.addSubview(emailTextField)
  250. inputsContainerView.addSubview(emailSeparatorView)
  251. inputsContainerView.addSubview(passwordTextField)
  252.  
  253. // ------------- Name ---------------------------
  254. // need x, y, width, height constraint
  255. nameTextField.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: 12).isActive = true
  256. nameTextField.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
  257. nameTextField.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  258.  
  259. nameTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
  260. nameTextFieldHeightAnchor?.isActive = true
  261.  
  262. // need x, y, width, height constraint
  263. nameSeparatorView.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor).isActive = true
  264. nameSeparatorView.topAnchor.constraint(equalTo: nameTextField.bottomAnchor).isActive = true
  265. nameSeparatorView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  266. nameSeparatorView.heightAnchor.constraint(equalToConstant: 1).isActive = true
  267.  
  268. // ------------- Email ---------------------------
  269. // need x, y, width, height constraint
  270. emailTextField.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: 12).isActive = true
  271. emailTextField.topAnchor.constraint(equalTo: nameTextField.bottomAnchor).isActive = true
  272. emailTextField.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  273.  
  274. emailTextFieldHeightAnchor = emailTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
  275. emailTextFieldHeightAnchor?.isActive = true
  276.  
  277. // need x, y, width, height constraint
  278. emailSeparatorView.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor).isActive = true
  279. emailSeparatorView.topAnchor.constraint(equalTo: emailTextField.bottomAnchor).isActive = true
  280. emailSeparatorView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  281. emailSeparatorView.heightAnchor.constraint(equalToConstant: 1).isActive = true
  282.  
  283. // ------------- Password ---------------------------
  284. // need x, y, width, height constraint
  285. passwordTextField.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: 12).isActive = true
  286. passwordTextField.topAnchor.constraint(equalTo: emailTextField.bottomAnchor).isActive = true
  287. passwordTextField.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  288.  
  289. passwordTextFieldHeightAnchor = passwordTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
  290. passwordTextFieldHeightAnchor?.isActive = true
  291.  
  292. }
  293.  
  294. func setupLoginRegisterButton()
  295. {
  296. // need x, y, width, height constraint
  297. loginRegisterButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
  298. loginRegisterButton.topAnchor.constraint(equalTo: inputsContainerView.bottomAnchor, constant: 12).isActive = true
  299. loginRegisterButton.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
  300. loginRegisterButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
  301. }
  302.  
  303. override public var preferredStatusBarStyle: UIStatusBarStyle
  304. {
  305. return .lightContent
  306. }
  307.  
  308. }
  309.  
  310. extension UIColor
  311. {
  312. convenience init(r: CGFloat, g: CGFloat, b: CGFloat)
  313. {
  314. self.init(red: r/255, green: g/255, blue: b/255, alpha: 1)
  315. }
  316. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement