Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // LoginController.swift
- // SnapMessage
- //
- // Created by Shan Lin on 4/18/17.
- // Copyright © 2017 Shan Lin. All rights reserved.
- //
- import UIKit
- import Firebase
- class LoginController: UIViewController
- {
- // Input Container
- let inputsContainerView: UIView =
- {
- let view = UIView()
- view.backgroundColor = UIColor.white
- view.translatesAutoresizingMaskIntoConstraints = false
- view.layer.cornerRadius = 5
- view.layer.masksToBounds = true
- return view
- }()
- // Login Reg Button
- lazy var loginRegisterButton: UIButton =
- {
- let button = UIButton(type: .system)
- button.backgroundColor = UIColor.gray
- button.setTitle("Register", for: .normal)
- button.translatesAutoresizingMaskIntoConstraints = false
- button.setTitleColor(UIColor.white, for: .normal)
- button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16)
- button.addTarget(self, action: #selector(handleRegister), for: .touchUpInside)
- return button
- }()
- func handleRegister()
- {
- guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text else
- {
- print("form is not valid")
- return
- }
- FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user: FIRUser?, error) in
- if error != nil
- {
- print(error!)
- return
- }
- // user auth success
- guard let uid = user?.uid else
- {
- return
- }
- let ref = FIRDatabase.database().reference(fromURL: "https://snapmessage-db1ed.firebaseio.com/")
- let usersReference = ref.child("users").child(uid)
- let values = ["name" : name, "email" : email]
- usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
- if err != nil
- {
- print(err!)
- return
- }
- print("user save to db success")
- })
- })
- print("Register")
- }
- // Name
- let nameTextField: UITextField =
- {
- let tf = UITextField()
- tf.placeholder = "Name"
- tf.translatesAutoresizingMaskIntoConstraints = false
- return tf
- }()
- let nameSeparatorView: UIView =
- {
- let view = UIView()
- view.backgroundColor = UIColor.lightGray
- view.translatesAutoresizingMaskIntoConstraints = false
- return view
- }()
- // Email
- let emailTextField: UITextField =
- {
- let tf = UITextField()
- tf.placeholder = "Email"
- tf.translatesAutoresizingMaskIntoConstraints = false
- tf.autocapitalizationType = UITextAutocapitalizationType.none
- return tf
- }()
- let emailSeparatorView: UIView =
- {
- let view = UIView()
- view.backgroundColor = UIColor.lightGray
- view.translatesAutoresizingMaskIntoConstraints = false
- return view
- }()
- // Password
- let passwordTextField: UITextField =
- {
- let tf = UITextField()
- tf.placeholder = "Password"
- tf.translatesAutoresizingMaskIntoConstraints = false
- tf.isSecureTextEntry = true
- return tf
- }()
- let profileImageView: UIImageView =
- {
- let imageView = UIImageView()
- imageView.image = UIImage(named: "sm")
- imageView.translatesAutoresizingMaskIntoConstraints = false
- imageView.contentMode = .scaleAspectFill
- return imageView
- }()
- lazy var loginRegisterSegmentedControl: UISegmentedControl =
- {
- let sc = UISegmentedControl(items: ["Login", "Register"])
- sc.translatesAutoresizingMaskIntoConstraints = false
- sc.tintColor = UIColor.white
- sc.selectedSegmentIndex = 1
- sc.addTarget(self, action: #selector(handleLoginRegisterChange), for: .valueChanged)
- return sc
- }()
- func handleLoginRegisterChange()
- {
- let title = loginRegisterSegmentedControl.titleForSegment(at: loginRegisterSegmentedControl.selectedSegmentIndex)
- loginRegisterButton.setTitle(title, for: .normal)
- // change height of input container
- if loginRegisterSegmentedControl.selectedSegmentIndex == 0
- {
- inputsContainerViewHeightAnchor?.constant = 100
- // change nametext height
- nameTextFieldHeightAnchor?.isActive = false
- nameTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 0)
- nameTextField.isHidden = true
- nameTextFieldHeightAnchor?.isActive = true
- emailTextFieldHeightAnchor?.isActive = false
- emailTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/2)
- emailTextFieldHeightAnchor?.isActive = true
- passwordTextFieldHeightAnchor?.isActive = false
- passwordTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/2)
- passwordTextFieldHeightAnchor?.isActive = true
- }
- else
- {
- inputsContainerViewHeightAnchor?.constant = 150
- // change nametext height
- nameTextFieldHeightAnchor?.isActive = false
- nameTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
- nameTextField.isHidden = false
- nameTextFieldHeightAnchor?.isActive = true
- emailTextFieldHeightAnchor?.isActive = false
- emailTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
- emailTextFieldHeightAnchor?.isActive = true
- passwordTextFieldHeightAnchor?.isActive = false
- passwordTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
- passwordTextFieldHeightAnchor?.isActive = true
- }
- print("!!!!!")
- print(inputsContainerViewHeightAnchor?.constant)
- }
- override func viewDidLoad()
- {
- super.viewDidLoad()
- // view.backgroundColor = UIColor(r:100, g: 100, b: 100)
- view.backgroundColor = UIColor.lightGray
- view.addSubview(inputsContainerView)
- view.addSubview(loginRegisterButton)
- view.addSubview(profileImageView)
- view.addSubview(loginRegisterSegmentedControl)
- setupInputsContainerView()
- setupLoginRegisterButton()
- setupProfileImageView()
- setUpLoginRegisterSegmentedControl()
- }
- func setUpLoginRegisterSegmentedControl()
- {
- // need x, y, width, height constraint
- loginRegisterSegmentedControl.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
- loginRegisterSegmentedControl.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor, constant: -12).isActive = true
- loginRegisterSegmentedControl.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- loginRegisterSegmentedControl.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3).isActive = true
- }
- func setupProfileImageView()
- {
- // need x, y, width, height constraint
- profileImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
- profileImageView.bottomAnchor.constraint(equalTo: loginRegisterSegmentedControl.topAnchor, constant: -12).isActive = true
- profileImageView.widthAnchor.constraint(equalToConstant: 150).isActive = true
- profileImageView.heightAnchor.constraint(equalToConstant: 150).isActive = true
- }
- var inputsContainerViewHeightAnchor: NSLayoutConstraint?
- var nameTextFieldHeightAnchor: NSLayoutConstraint?
- var emailTextFieldHeightAnchor: NSLayoutConstraint?
- var passwordTextFieldHeightAnchor: NSLayoutConstraint?
- func setupInputsContainerView()
- {
- // need x, y, width, height constraint
- inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
- inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
- inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
- inputsContainerViewHeightAnchor = inputsContainerView.heightAnchor.constraint(equalToConstant: 150)
- inputsContainerViewHeightAnchor?.isActive = true
- inputsContainerView.addSubview(nameTextField)
- inputsContainerView.addSubview(nameSeparatorView)
- inputsContainerView.addSubview(emailTextField)
- inputsContainerView.addSubview(emailSeparatorView)
- inputsContainerView.addSubview(passwordTextField)
- // ------------- Name ---------------------------
- // need x, y, width, height constraint
- nameTextField.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: 12).isActive = true
- nameTextField.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
- nameTextField.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- nameTextFieldHeightAnchor = nameTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
- nameTextFieldHeightAnchor?.isActive = true
- // need x, y, width, height constraint
- nameSeparatorView.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor).isActive = true
- nameSeparatorView.topAnchor.constraint(equalTo: nameTextField.bottomAnchor).isActive = true
- nameSeparatorView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- nameSeparatorView.heightAnchor.constraint(equalToConstant: 1).isActive = true
- // ------------- Email ---------------------------
- // need x, y, width, height constraint
- emailTextField.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: 12).isActive = true
- emailTextField.topAnchor.constraint(equalTo: nameTextField.bottomAnchor).isActive = true
- emailTextField.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- emailTextFieldHeightAnchor = emailTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
- emailTextFieldHeightAnchor?.isActive = true
- // need x, y, width, height constraint
- emailSeparatorView.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor).isActive = true
- emailSeparatorView.topAnchor.constraint(equalTo: emailTextField.bottomAnchor).isActive = true
- emailSeparatorView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- emailSeparatorView.heightAnchor.constraint(equalToConstant: 1).isActive = true
- // ------------- Password ---------------------------
- // need x, y, width, height constraint
- passwordTextField.leftAnchor.constraint(equalTo: inputsContainerView.leftAnchor, constant: 12).isActive = true
- passwordTextField.topAnchor.constraint(equalTo: emailTextField.bottomAnchor).isActive = true
- passwordTextField.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- passwordTextFieldHeightAnchor = passwordTextField.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor, multiplier: 1/3)
- passwordTextFieldHeightAnchor?.isActive = true
- }
- func setupLoginRegisterButton()
- {
- // need x, y, width, height constraint
- loginRegisterButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
- loginRegisterButton.topAnchor.constraint(equalTo: inputsContainerView.bottomAnchor, constant: 12).isActive = true
- loginRegisterButton.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
- loginRegisterButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
- }
- override public var preferredStatusBarStyle: UIStatusBarStyle
- {
- return .lightContent
- }
- }
- extension UIColor
- {
- convenience init(r: CGFloat, g: CGFloat, b: CGFloat)
- {
- self.init(red: r/255, green: g/255, blue: b/255, alpha: 1)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement