diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3997c59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# General + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails + +._* + +## User settings + +xcuserdata/ + +- .xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) + +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.ipa +*.xcuserstate + +### Xcode Patch + +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings + +### AppCode + +.idea/* + +### fastlane + +fastlane/report.xml + +- .generated.swift +*.xcuserstate diff --git a/Login page layout.xcodeproj/project.pbxproj b/Login page layout.xcodeproj/project.pbxproj index 971807d..e2fb85e 100644 --- a/Login page layout.xcodeproj/project.pbxproj +++ b/Login page layout.xcodeproj/project.pbxproj @@ -10,9 +10,9 @@ 600A670729A88446002EA0DC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600A670629A88446002EA0DC /* AppDelegate.swift */; }; 600A670929A88446002EA0DC /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600A670829A88446002EA0DC /* SceneDelegate.swift */; }; 600A670B29A88446002EA0DC /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600A670A29A88446002EA0DC /* ViewController.swift */; }; - 600A670E29A88446002EA0DC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 600A670C29A88446002EA0DC /* Main.storyboard */; }; 600A671029A88448002EA0DC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 600A670F29A88448002EA0DC /* Assets.xcassets */; }; 600A671329A88448002EA0DC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 600A671129A88448002EA0DC /* LaunchScreen.storyboard */; }; + 600A671C29A88A1E002EA0DC /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 600A671B29A88A1E002EA0DC /* SnapKit */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -20,7 +20,6 @@ 600A670629A88446002EA0DC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 600A670829A88446002EA0DC /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 600A670A29A88446002EA0DC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 600A670D29A88446002EA0DC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 600A670F29A88448002EA0DC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 600A671229A88448002EA0DC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 600A671429A88448002EA0DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -31,6 +30,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 600A671C29A88A1E002EA0DC /* SnapKit in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -59,7 +59,6 @@ 600A670629A88446002EA0DC /* AppDelegate.swift */, 600A670829A88446002EA0DC /* SceneDelegate.swift */, 600A670A29A88446002EA0DC /* ViewController.swift */, - 600A670C29A88446002EA0DC /* Main.storyboard */, 600A670F29A88448002EA0DC /* Assets.xcassets */, 600A671129A88448002EA0DC /* LaunchScreen.storyboard */, 600A671429A88448002EA0DC /* Info.plist */, @@ -83,6 +82,9 @@ dependencies = ( ); name = "Login page layout"; + packageProductDependencies = ( + 600A671B29A88A1E002EA0DC /* SnapKit */, + ); productName = "Login page layout"; productReference = 600A670329A88446002EA0DC /* Login page layout.app */; productType = "com.apple.product-type.application"; @@ -111,6 +113,9 @@ Base, ); mainGroup = 600A66FA29A88446002EA0DC; + packageReferences = ( + 600A671A29A88A1E002EA0DC /* XCRemoteSwiftPackageReference "SnapKit" */, + ); productRefGroup = 600A670429A88446002EA0DC /* Products */; projectDirPath = ""; projectRoot = ""; @@ -127,7 +132,6 @@ files = ( 600A671329A88448002EA0DC /* LaunchScreen.storyboard in Resources */, 600A671029A88448002EA0DC /* Assets.xcassets in Resources */, - 600A670E29A88446002EA0DC /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -147,14 +151,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 600A670C29A88446002EA0DC /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 600A670D29A88446002EA0DC /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; 600A671129A88448002EA0DC /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -292,7 +288,6 @@ INFOPLIST_FILE = "Login page layout/Info.plist"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; LD_RUNPATH_SEARCH_PATHS = ( @@ -320,7 +315,6 @@ INFOPLIST_FILE = "Login page layout/Info.plist"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; LD_RUNPATH_SEARCH_PATHS = ( @@ -358,6 +352,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 600A671A29A88A1E002EA0DC /* XCRemoteSwiftPackageReference "SnapKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SnapKit/SnapKit.git"; + requirement = { + branch = develop; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 600A671B29A88A1E002EA0DC /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = 600A671A29A88A1E002EA0DC /* XCRemoteSwiftPackageReference "SnapKit" */; + productName = SnapKit; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 600A66FB29A88446002EA0DC /* Project object */; } diff --git a/Login page layout.xcodeproj/xcuserdata/adlet-admin.xcuserdatad/xcschemes/xcschememanagement.plist b/Login page layout.xcodeproj/xcuserdata/adlet-admin.xcuserdatad/xcschemes/xcschememanagement.plist index f9c3d1d..591a172 100644 --- a/Login page layout.xcodeproj/xcuserdata/adlet-admin.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Login page layout.xcodeproj/xcuserdata/adlet-admin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,6 +9,48 @@ orderHint 0 + SnapKitPlayground (Playground) 1.xcscheme + + isShown + + orderHint + 3 + + SnapKitPlayground (Playground) 2.xcscheme + + isShown + + orderHint + 4 + + SnapKitPlayground (Playground) 3.xcscheme + + isShown + + orderHint + 0 + + SnapKitPlayground (Playground) 4.xcscheme + + isShown + + orderHint + 5 + + SnapKitPlayground (Playground) 5.xcscheme + + isShown + + orderHint + 6 + + SnapKitPlayground (Playground).xcscheme + + isShown + + orderHint + 2 + diff --git a/Login page layout/Assets.xcassets/background.imageset/Contents.json b/Login page layout/Assets.xcassets/background.imageset/Contents.json new file mode 100644 index 0000000..1d188d9 --- /dev/null +++ b/Login page layout/Assets.xcassets/background.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "background.jpeg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Login page layout/Assets.xcassets/background.imageset/background.jpeg b/Login page layout/Assets.xcassets/background.imageset/background.jpeg new file mode 100644 index 0000000..20399b6 Binary files /dev/null and b/Login page layout/Assets.xcassets/background.imageset/background.jpeg differ diff --git a/Login page layout/Assets.xcassets/facebook.imageset/Contents.json b/Login page layout/Assets.xcassets/facebook.imageset/Contents.json new file mode 100644 index 0000000..1f24589 --- /dev/null +++ b/Login page layout/Assets.xcassets/facebook.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "facebook.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Login page layout/Assets.xcassets/facebook.imageset/facebook.png b/Login page layout/Assets.xcassets/facebook.imageset/facebook.png new file mode 100644 index 0000000..1eb64d2 Binary files /dev/null and b/Login page layout/Assets.xcassets/facebook.imageset/facebook.png differ diff --git a/Login page layout/Assets.xcassets/twitter.imageset/Contents.json b/Login page layout/Assets.xcassets/twitter.imageset/Contents.json new file mode 100644 index 0000000..2c808b8 --- /dev/null +++ b/Login page layout/Assets.xcassets/twitter.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "twitter.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Login page layout/Assets.xcassets/twitter.imageset/twitter.png b/Login page layout/Assets.xcassets/twitter.imageset/twitter.png new file mode 100644 index 0000000..74bc52d Binary files /dev/null and b/Login page layout/Assets.xcassets/twitter.imageset/twitter.png differ diff --git a/Login page layout/Base.lproj/Main.storyboard b/Login page layout/Base.lproj/Main.storyboard deleted file mode 100644 index 25a7638..0000000 --- a/Login page layout/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Login page layout/Info.plist b/Login page layout/Info.plist index dd3c9af..0eb786d 100644 --- a/Login page layout/Info.plist +++ b/Login page layout/Info.plist @@ -15,8 +15,6 @@ Default Configuration UISceneDelegateClassName $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main diff --git a/Login page layout/SceneDelegate.swift b/Login page layout/SceneDelegate.swift index d2173a5..24fd1f1 100644 --- a/Login page layout/SceneDelegate.swift +++ b/Login page layout/SceneDelegate.swift @@ -13,10 +13,12 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } + + guard let windowScene = (scene as? UIWindowScene) else { return } + let window = UIWindow(windowScene: windowScene) + window.rootViewController = ViewController() + window.makeKeyAndVisible() + self.window = window } func sceneDidDisconnect(_ scene: UIScene) { diff --git a/Login page layout/ViewController.swift b/Login page layout/ViewController.swift index ce03ea0..d0ee3d1 100644 --- a/Login page layout/ViewController.swift +++ b/Login page layout/ViewController.swift @@ -6,14 +6,256 @@ // import UIKit +import SnapKit class ViewController: UIViewController { + + private lazy var viewBackgroundImage: UIImageView = { + let imageName = "background" + let image = UIImage(named: imageName) + let imageView = UIImageView(image: image) + imageView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) + return imageView + }() + private lazy var loginLabel: UILabel = { + let loginLabel = UILabel() + loginLabel.text = "STARTIOS" + loginLabel.textColor = .white + loginLabel.font = UIFont(name: "Futura", size: CGFloat(30)) + return loginLabel + }() + private lazy var usernameTextField: UITextField = { + let usernameTextField = UITextField() + usernameTextField.placeholder = "keanureeves01" + usernameTextField.setLeftIcon(image: UIImage(systemName: "person.fill") ?? UIImage.remove) + usernameTextField.setRightIcon(image: UIImage(systemName: "checkmark.circle.fill") ?? UIImage.remove) + usernameTextField.backgroundColor = .white + usernameTextField.textColor = .black + usernameTextField.layer.cornerRadius = view.frame.width*0.063613 + return usernameTextField + }() + private lazy var passwordTextField: UITextField = { + let passwordTextField = UITextField() + passwordTextField.placeholder = "password" + passwordTextField.setLeftIcon(image: UIImage(systemName: "lock.fill")!) + passwordTextField.backgroundColor = .white + passwordTextField.textColor = .black + passwordTextField.layer.cornerRadius = view.frame.width*0.063613 + return passwordTextField + }() + private lazy var loginButton: UIButton = { + let loginButton = UIButton() + loginButton.setTitle("Login", for: .normal) + loginButton.layer.shadowColor = UIColor.black.cgColor + loginButton.layer.shadowOpacity = 0.3 + loginButton.layer.shadowOffset = .zero + loginButton.layer.shadowRadius = 10 + loginButton.layer.shouldRasterize = true + loginButton.layer.rasterizationScale = UIScreen.main.scale + loginButton.backgroundColor = .purple + loginButton.setTitleColor(.white, for: .normal) + loginButton.layer.cornerRadius = view.frame.width*0.063613 + return loginButton + }() + private lazy var forgotPasswordButton: UIButton = { + let forgotPasswordButton = UIButton() + forgotPasswordButton.setTitle("Forgot your password?", for: .normal) + forgotPasswordButton.layer.shadowColor = UIColor.black.cgColor + forgotPasswordButton.layer.shadowOpacity = 0.3 + forgotPasswordButton.layer.shadowOffset = .zero + forgotPasswordButton.layer.shadowRadius = 10 + forgotPasswordButton.layer.shouldRasterize = true + forgotPasswordButton.layer.rasterizationScale = UIScreen.main.scale + forgotPasswordButton.setTitleColor(.white, for: .normal) + forgotPasswordButton.titleLabel?.font = .systemFont(ofSize: 10) + return forgotPasswordButton + }() + private lazy var view1: UIView = { + let view1 = UIView() + view1.backgroundColor = .gray + return view1 + }() + private lazy var connectLabel: UILabel = { + let connectLabel = UILabel() + connectLabel.text = "or connect with" + connectLabel.textColor = .white + connectLabel.font = .systemFont(ofSize: 15) + return connectLabel + }() + private lazy var view2: UIView = { + let view2 = UIView() + view2.backgroundColor = .gray + return view2 + }() + private lazy var facebookButton: UIButton = { + let facebookButton = UIButton() + facebookButton.setTitle("Facebook", for: .normal) + facebookButton.layer.shadowColor = UIColor.black.cgColor + facebookButton.layer.shadowOpacity = 0.3 + facebookButton.layer.shadowOffset = .zero + facebookButton.layer.shadowRadius = 10 + facebookButton.layer.shouldRasterize = true + facebookButton.layer.rasterizationScale = UIScreen.main.scale + facebookButton.titleLabel?.font = .systemFont(ofSize: 10) + facebookButton.backgroundColor = .blue + facebookButton.setTitleColor(.white, for: .normal) + facebookButton.layer.cornerRadius = 10 + return facebookButton + }() + private lazy var twitterButton: UIButton = { + let twitterButton = UIButton() + twitterButton.setTitle("Twitter", for: .normal) + twitterButton.layer.shadowColor = UIColor.black.cgColor + twitterButton.layer.shadowOpacity = 0.3 + twitterButton.layer.shadowOffset = .zero + twitterButton.layer.shadowRadius = 10 + twitterButton.layer.shouldRasterize = true + twitterButton.layer.rasterizationScale = UIScreen.main.scale + twitterButton.titleLabel?.font = .systemFont(ofSize: 10) + twitterButton.backgroundColor = .systemBlue + twitterButton.setTitleColor(.white, for: .normal) + twitterButton.layer.cornerRadius = 10 + return twitterButton + }() + private lazy var facebookView: UIImageView = { + let facebookView = UIImageView(frame: CGRect(x: 10, y: 5, width: 20, height: 20)) + facebookView.image = UIImage(named: "facebook") + return facebookView + }() + private lazy var twitterView: UIImageView = { + let twitterView = UIImageView(frame: CGRect(x: 10, y: 5, width: 20, height: 20)) + twitterView.image = UIImage(named: "twitter") + return twitterView + }() + private lazy var noAccount: UILabel = { + let noAccount = UILabel() + noAccount.text = "Dont have account?" + noAccount.textColor = .white + noAccount.font = .systemFont(ofSize: 10) + return noAccount + }() + private lazy var signupButton: UIButton = { + let signupButton = UIButton() + signupButton.setTitle("Sign up", for: .normal) + signupButton.layer.shadowColor = UIColor.black.cgColor + signupButton.layer.shadowOpacity = 0.3 + signupButton.layer.shadowOffset = .zero + signupButton.layer.shadowRadius = 10 + signupButton.layer.shouldRasterize = true + signupButton.layer.rasterizationScale = UIScreen.main.scale + signupButton.titleLabel?.font = .systemFont(ofSize: 10) + signupButton.setTitleColor(.blue, for: .normal) + return signupButton + }() override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + + setupHierarchy() + setupLayout() + } + private func setupHierarchy() { + let subviews = [viewBackgroundImage,loginLabel,usernameTextField,passwordTextField,loginButton, + forgotPasswordButton,view1,connectLabel,view2,facebookButton,facebookView, + twitterButton,twitterView,noAccount,signupButton] + subviews.forEach { view.addSubview($0) } + } + private func setupLayout() { + + loginLabel.snp.makeConstraints { loginLabel in + loginLabel.centerX.equalTo(view) + loginLabel.top.equalTo(view).offset(view.frame.height*0.117) + } + usernameTextField.snp.makeConstraints { usernameTextField in + usernameTextField.centerX.equalTo(view) + usernameTextField.height.equalTo(view.frame.height*0.058) + usernameTextField.top.equalTo(loginLabel.snp.bottom).offset(view.frame.height*0.0704) + usernameTextField.left.equalTo(view.snp.left).offset(view.frame.width*0.152) + } + passwordTextField.snp.makeConstraints { passwordTextField in + passwordTextField.centerX.equalTo(view) + passwordTextField.height.equalTo(view.frame.height*0.058) + passwordTextField.top.equalTo(usernameTextField.snp.bottom).offset(view.frame.height*0.0352) + passwordTextField.left.equalTo(view.snp.left).offset(view.frame.width*0.152) + } + loginButton.snp.makeConstraints { loginButton in + loginButton.centerX.equalTo(view) + loginButton.height.equalTo(view.frame.height*0.058) + loginButton.top.equalTo(passwordTextField.snp.bottom).offset(view.frame.height*0.0704) + loginButton.width.equalTo(passwordTextField) + } + forgotPasswordButton.snp.makeConstraints { forgotPasswordButton in + forgotPasswordButton.centerX.equalTo(view) + forgotPasswordButton.top.equalTo(loginButton.snp.bottom).offset(view.frame.height*0.006) + } + view1.snp.makeConstraints { view1 in + view1.centerX.equalTo(view).offset(view.frame.width/2*0.509) + view1.height.equalTo(1) + view1.width.equalTo(view.frame.width*0.178) + view1.bottom.equalTo(view).inset(view.frame.height*0.242) + } + connectLabel.snp.makeConstraints { connectLabel in + connectLabel.centerX.equalTo(view) + connectLabel.bottom.equalTo(view).inset(view.frame.height*0.235) + } + view2.snp.makeConstraints { view2 in + view2.centerX.equalTo(view).offset(-view.frame.width/2*0.509) + view2.height.equalTo(1) + view2.width.equalTo(view.frame.width*0.178) + view2.bottom.equalTo(view).inset(view.frame.height*0.242) + print(view.frame.width) + print(view.frame.height) + } + facebookButton.snp.makeConstraints { facebookButton in + facebookButton.centerX.equalTo(view).offset(-view.frame.width/2*0.407) + facebookButton.width.equalTo(view.frame.width*0.381) + facebookButton.height.equalTo(view.frame.height*0.035) + facebookButton.top.equalTo(connectLabel.snp.bottom).offset(view.frame.height*0.017) + } + twitterButton.snp.makeConstraints { twitterButton in + twitterButton.centerX.equalTo(view).offset(view.frame.width/2*0.407) + twitterButton.width.equalTo(view.frame.width*0.381) + twitterButton.height.equalTo(view.frame.height*0.035) + twitterButton.top.equalTo(connectLabel.snp.bottom).offset(view.frame.height*0.017) + } + facebookView.snp.makeConstraints { facebookView in + facebookView.centerX.equalTo(view).offset(-view.frame.width/2*0.636) + facebookView.top.equalTo(connectLabel.snp.bottom).offset(view.frame.height*0.025) + facebookView.width.equalTo(15) + facebookView.height.equalTo(15) + } + twitterView.snp.makeConstraints { twitterView in + twitterView.centerX.equalTo(view).offset(view.frame.width/2*0.203) + twitterView.top.equalTo(connectLabel.snp.bottom).offset(view.frame.height*0.025) + twitterView.width.equalTo(15) + twitterView.height.equalTo(15) + } + noAccount.snp.makeConstraints { noAccount in + noAccount.centerX.equalTo(view).offset(-view.frame.width/2*0.152) + noAccount.top.equalTo(twitterButton.snp.bottom).offset(view.frame.height*0.030516) + } + signupButton.snp.makeConstraints { signupButton in + signupButton.centerX.equalTo(view).offset(view.frame.width/2*0.229) + signupButton.top.equalTo(twitterButton.snp.bottom).offset(view.frame.height*0.023474) + } } - - } +extension UITextField { + func setLeftIcon(image: UIImage) { + let iconView = UIImageView(frame: CGRect(x: 10, y: 5, width: 20, height: 20)) + iconView.image = image + let iconContainerView: UIView = UIView(frame: CGRect(x: 20, y: 0, width: 40, height: 30)) + iconContainerView.addSubview(iconView) + leftView = iconContainerView + leftViewMode = .always + } + func setRightIcon(image: UIImage) { + let iconView = UIImageView(frame: CGRect(x: 0, y: 5, width: 20, height: 20)) + iconView.image = image + let iconContainerView: UIView = UIView(frame: CGRect(x: 20, y: 0, width: 40, height: 30)) + iconContainerView.addSubview(iconView) + rightView = iconContainerView + rightViewMode = .always + } +}