QQ登陆页面实现
最終效果圖如下:
注意事項:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz7K5Mjrv/K1xHJldHVybiBLZXk8L3N0cm9uZz48L3A+CjxwPjxzdHJvbmc+TWFpbi5zdG9yeWJvYXJk1tDOqiBMb2dpbkNvbnRyb2xsZXIgyejWw9K7uPZzdG9yeWJvYXJkSUQsPC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPtLUseO/ydLU1Nq0+sLr1tDNqLn9U3Rvcnlib2FyZLbUz/PKtcD9LLS0vahNYWluLnN0b3J5Ym9hcmTA78PmtcS/2NbGxvc8L3N0cm9uZz48L3A+CjxwPjxzdHJvbmc+PGJyPgo8L3N0cm9uZz48L3A+CjxwPjxzdHJvbmc+PGJyPgo8L3N0cm9uZz48L3A+CjxwPjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140902/20140902085743107.png" alt="\">
仿QQ窗口抖動
dispach_after模擬延時
輸入框的return Key的不同處理方式
Login控制器代碼
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | // //? LoginController.m //? 28_QQ空間 // //? Created by beyond on 14-9-1. //? Copyright (c) 2014年 com.beyond. All rights reserved. //? Main.storyboard中初始化時的控制器,登錄控制器 驗證成功后,跳轉至主控制器 #import "LoginController.h" // 驗證成功后,跳轉至主控制器 #import "BeyondViewController.h" @interface LoginController () <uitextfielddelegate> #pragma mark - 拖線 屬性 // 登錄框整體 @property (weak, nonatomic) IBOutlet UIView *loginContentView; // 帳號 @property (weak, nonatomic) IBOutlet UITextField *usernameField; // 密碼 @property (weak, nonatomic) IBOutlet UITextField *passwordField; // 登錄按鈕 @property (weak, nonatomic) IBOutlet UIButton *loginBtn; // 記住密碼btn @property (weak, nonatomic) IBOutlet UIButton *rememberPwdBtn; // 自動登錄btn @property (weak, nonatomic) IBOutlet UIButton *autoLoginBtn; // 加載中... @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator; #pragma mark - 拖線 方法 // 登錄按鈕被點擊 - (IBAction)loginBtnClicked; // 點擊了記住密碼 或 自動登錄 - (IBAction)checkboxBtnClicked:(UIButton *)sender; @end @implementation LoginController - (void)viewDidLoad { ????[super viewDidLoad]; ????// 1.設置登陸控制器 的背景色 為全局深黑色 ????self.view.backgroundColor = kGlobalBgColor; ????? ????// 2.設置登錄按鈕不同狀態下的背景 ????[self.loginBtn setBtnBgImgForNormal:@"login_button_normal" highlightedName:@"login_button_pressed"]; } // 點擊屏幕空白處,退出鍵盤 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { ????[self.view endEditing:YES]; } #pragma mark - 拖線方法 // 點擊了記住密碼 或 自動登錄 - (IBAction)checkboxBtnClicked:(UIButton *)sender { ????// 設置勾選 或 取消勾選 ????sender.selected = ! sender.isSelected; ????// 重要~~~ ????if (sender == self.rememberPwdBtn && !sender.isSelected) { ????????// 取消了“記住密碼”,這時候 就可以同時取消 自動登錄了,因為用戶不想記住密碼,自然就無法實現 自動登錄功能 ????????self.autoLoginBtn.selected = NO; ????} else if (sender == self.autoLoginBtn && sender.isSelected) { ????????// 當用戶 選中了“自動登錄”,那么表示他想自動登錄,那么可以同時把記住密碼勾選上 ????????self.rememberPwdBtn.selected = YES; ????} } // 點擊登錄按鈕 - (IBAction)loginBtnClicked { ????// 1.驗證帳號 ????NSString *account = self.usernameField.text; ????if (account.length == 0) { ????????[self showError:@"請輸入帳號"]; ????????return; ????} ????? ????// 2.驗證密碼 ????NSString *password = self.passwordField.text; ????if (password.length == 0) { ????????[self showError:@"請輸入密碼"]; ????????return; ????} ????? ????// 3.發送請求 ????self.view.userInteractionEnabled = NO; ????[self.activityIndicator startAnimating]; ????? ????// 模擬延時 ????CGFloat delay = 2.0; ????dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ ????????// 4.登錄完畢(請求完畢) ????????[self.activityIndicator stopAnimating]; ????????self.view.userInteractionEnabled = YES; ????????? ????????// 5.賬號密碼同時為123才是正確 ????????if (![account isEqualToString:@"123"]) { ????????????[self showError:@"帳號或密碼錯誤"]; ????????????return; ????????} ????????if (![password isEqualToString:@"123"]) { ????????????[self showError:@"帳號或密碼錯誤"]; ????????????return; ????????} ????????? ????????// 6.登錄成功? 跳轉到主頁 ????????self.view.window.rootViewController = [[BeyondViewController alloc] init]; ????}); } #pragma mark - 自定義方法 // 提示錯誤信息 - (void)showError:(NSString *)errorMsg { ????// 1.彈框提醒 ????UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"登錄失敗" message:errorMsg delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil]; ????[alert show]; ????? ????// 2.仿QQ窗口抖動 ????// 核心動畫之 關鍵幀動畫 ????CAKeyframeAnimation *shakeAnim = [CAKeyframeAnimation animation]; ????// 哪一個成員屬性 需要動畫,答:x ????shakeAnim.keyPath = @"transform.translation.x"; ????shakeAnim.duration = 0.15; ????CGFloat delta = 10; ????// 數組,指定每一幀時的x值 ????shakeAnim.values = @[@0, @(-delta), @(delta), @0]; ????shakeAnim.repeatCount = 2; ????// 讓view所在的圖層執行 關鍵幀動畫 ????[self.loginContentView.layer addAnimation:shakeAnim forKey:nil]; } #pragma mark - UITextField代理方法 // 控制器 鍵盤上returnKey在不同輸入框下的作用,如Next 或 Done - (BOOL)textFieldShouldReturn:(UITextField *)textField { ????if (textField == self.usernameField) { ????????// 帳號輸入框(Next) ????????[self.passwordField becomeFirstResponder]; ????} else { ????????// 密碼框(Done),調用自定義方法,執行登錄 ????????[self loginBtnClicked]; ????} ????return YES; } @end </uitextfielddelegate> |
退出,并且回到Main.storyboard里面的初始的登錄控制器
原地址:http://www.2cto.com/kf/201409/330294.html
總結
- 上一篇: 模式识别技术,目前主要应用于哪几方面?
- 下一篇: Echarts 做的温度计