QQ登陆页面实现

iOS_28仿QQ空间登录与退出
2014-09-02      我来说两句    来源:pre_eminent的JAVA学习园地  
收藏   我要投稿

最终效果图如下:

\


注意事项:<喎�"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

import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.ImageIcon; import javax.swing.*; import java.lang.*; import java.sql.*; class Imagecanvas extends Canvas { Toolkit tool; Image Im; Imagecanvas() { setSize(360, 50); tool = getToolkit(); Im = tool.getImage("dj.jpg"); } public void paint(Graphics g) { g.drawImage(Im, 0, 0, 360, 50, this); } } class QqBorder1 extends JFrame implements ActionListener { Choice cho; QqBorder1() { super("QQ2010"); setSize(360, 260); setLocation(250, 120); setResizable(false); Container c = getContentPane(); FlowLayout layout = new FlowLayout(FlowLayout.CENTER); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); cho = new Choice(); cho.add("在线"); cho.add("隐身"); cho.add("离线"); cho.add("忙碌"); cho.add("请勿打扰"); Imagecanvas canvas1 = new Imagecanvas(); p1.setSize(360, 50); p1.add(canvas1); TextField username = new TextField(25); TextField password = new TextField(25); password.setEchoChar('*'); JButton btrystu = new JButton("登陆"); JButton sezhi = new JButton("设置"); JCheckBox check1 = new JCheckBox("记住密码"); JCheckBox check2 = new JCheckBox("自动登陆"); // p1.setSize(360, 200); JPanel p21 = new JPanel(); JPanel p22 = new JPanel(); p21.add(new JLabel("账号:")); p21.add(username); p21.add(new JLabel("<html><font color=blue>注册新账号</font></html>")); // p21.add(new JLabel(" ")); p21.add(new JLabel("密码:")); p21.add(password); p21.add(new JLabel("<html><font color=blue> 找 回 密 码 </font></html>")); p22.add(new JLabel("状态:")); p22.add(new JLabel(" ")); p22.add(cho); p22.add(check1); p22.add(check2); p22.add(new JLabel(" ")); p2.add(p21); p2.add(p22); p2.setBounds(100, 300, 200, 300); p2.setLayout(new GridLayout(2, 1, 10, 10)); p3.add(sezhi); p3.add(new JLabel(" ")); p3.add(btrystu); add(BorderLayout.NORTH, p1); add(BorderLayout.CENTER, p2); add(BorderLayout.SOUTH, p3); this.setVisible(true); } public void actionPerformed(ActionEvent e) { } } public class QqBorder { }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值