最终效果图如下:
注意事项:
输入框的return Key
Main.storyboard中为 LoginController 设置一个storyboardID,
以便可以在代码中通过Storyboard对象实例,创建Main.storyboard里面的控制器
仿QQ窗口抖动
dispach_after模拟延时
输入框的return Key的不同处理方式
Login控制器代码
//// 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.d框提醒 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
退出,并且回到Main.storyboard里面的初始的登录控制器
总结以上是内存溢出为你收集整理的iOS_28仿QQ空间登录与退出全部内容,希望文章能够帮你解决iOS_28仿QQ空间登录与退出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)