iOS開發(fā) 登錄界面(界面版)

很多APP都會構(gòu)建登錄界面践啄,我想分享我在搭建登錄界面時用到的一些效果浇雹。
  傳送門: iOS開發(fā) 登錄界面(邏輯版)


輸入框間距

輸入框間距.png
封裝的方法:
/**
 textField前面空一段距離
 
 @param textField 傳入textField
 @param leftWidth 前面空的寬度
 */
-(void)setTextFieldLeftPadding:(UITextField *)textField forWidth:(CGFloat)leftWidth
{
    CGRect frame = textField.frame;
    frame.size.width = leftWidth;
    UIView *leftview = [[UIView alloc] initWithFrame:frame];
    textField.leftViewMode = UITextFieldViewModeAlways;
    textField.leftView = leftview;
}
演示代碼
[self setTextFieldLeftPadding:FillInTheAccountNumber forWidth:10.0];

可彈按鈕

可彈按鈕_模型效果.gif

原創(chuàng):GitHub地址 、簡書 地址
(PS:下面的代碼屿讽,在原創(chuàng)的基礎(chǔ)上進行了一定的修改昭灵!有興趣可以看看原創(chuàng)的代碼,并不復雜7ヌ浮)

完整類別:

XYRPushButton.h

#import <UIKit/UIKit.h>

typedef void(^ClickBlock)();

@interface XYRPushButton : UIButton

@property (nonatomic, copy) ClickBlock clickBlock;
@property (nonatomic, assign) CGFloat buttonScale;//縮小的比率烂完,小于=1.0,大于0.0

/**
 按鈕初始化
 
 @param type UIButtonType
 @param frame CGRect
 @param title 按鈕文字(可選,nil)
 @param color 文字顏色 (可選诵棵,nil)
 @param backgroundColor 背景色 (可選抠蚣,nil)
 @param image 背景圖片 (可選,nil)
 @param tempBlock 按鈕被按下時履澳,會調(diào)用這個回調(diào)
 @return 返回XYRPushButton的按鈕
 */
+ (XYRPushButton *)XYRTouchButtonWithType:(UIButtonType)type
                                    frame:(CGRect)frame
                                    title:(NSString *)title
                               titleColor:(UIColor *)color
                          backgroundColor:(UIColor *)backgroundColor
                          backgroundImage:(NSString *)image
                                 andBlock:(ClickBlock)tempBlock;
@end

XYRPushButton.m

#import "XYRPushButton.h"

#define animateDelay 0.15   //默認動畫執(zhí)行時間
#define defaultScale 0.9    //默認縮小的比率

@implementation XYRPushButton

+ (XYRPushButton *)XYRTouchButtonWithType:(UIButtonType)type
                                    frame:(CGRect)frame
                                    title:(NSString *)title
                               titleColor:(UIColor *)color
                          backgroundColor:(UIColor *)backgroundColor
                          backgroundImage:(NSString *)image
                                 andBlock:(ClickBlock)tempBlock
{
    XYRPushButton * pushBtn = [XYRPushButton buttonWithType:type];
    pushBtn.frame = frame;
    
    if (title!=nil) {
        [pushBtn setTitle:title forState:UIControlStateNormal];
    }
    if (color!=nil) {
        [pushBtn setTitleColor:color forState:UIControlStateNormal];
    }
    if (backgroundColor!=nil) {
        [pushBtn setBackgroundColor:backgroundColor];
    }
    if (image!=nil) {
        [pushBtn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
    }
    
    [pushBtn addTarget:pushBtn action:@selector(pressedEvent:) forControlEvents:UIControlEventTouchDown];
    [pushBtn addTarget:pushBtn action:@selector(cancelEvent:) forControlEvents:UIControlEventTouchUpOutside];
    [pushBtn addTarget:pushBtn action:@selector(unpressedEvent:) forControlEvents:UIControlEventTouchUpInside];
    
    //給按鈕的block賦值
    pushBtn.clickBlock = tempBlock;
    
    return pushBtn;
}

//按鈕的壓下事件 按鈕縮小
- (void)pressedEvent:(XYRPushButton *)btn{
    //縮放比例必須大于0嘶窄,且小于等于1
    CGFloat scale = (_buttonScale && _buttonScale <=1.0) ? _buttonScale : defaultScale;
    
    [UIView animateWithDuration:animateDelay animations:^{
        btn.transform = CGAffineTransformMakeScale(scale, scale);
    }];
}
//點擊手勢拖出按鈕frame區(qū)域松開,響應(yīng)取消
- (void)cancelEvent:(XYRPushButton *)btn{
    [UIView animateWithDuration:animateDelay animations:^{
        btn.transform = CGAffineTransformMakeScale(1.0, 1.0);
    } completion:^(BOOL finished) {
        
    }];
}
//按鈕的松開事件 按鈕復原 執(zhí)行響應(yīng)
- (void)unpressedEvent:(XYRPushButton *)btn{
    [UIView animateWithDuration:animateDelay animations:^{
        btn.transform = CGAffineTransformMakeScale(1.0, 1.0);
    } completion:^(BOOL finished) {
        //執(zhí)行動作響應(yīng)
        if (self.clickBlock) {
            self.clickBlock();
        }
    }];
}
演示代碼
 XYRPushButton *btn=[XYRPushButton XYRTouchButtonWithType:UIButtonTypeCustom frame:CGRectMake(50, 50, 200, 30) title:@"好的" titleColor:[UIColor colorWithRed:239/255.0 green:103/255.0 blue:84/255.0 alpha:1.0] backgroundColor:[UIColor colorWithRed:72/255.0 green:96/255.0 blue:143/255.0 alpha:1.0] backgroundImage:nil andBlock:^{
        NSLog(@"被點擊距贷!");
    }];
    btn.center=CGPointMake(self.view.frame.size.width/2, 100);
    [self.view addSubview:btn];

驗證碼倒計時效果

模型效果:


模型效果.gif

項目效果:


項目效果.gif
封裝方法
/**
 獲取驗證碼柄冲,倒計時
 @param sender 獲取驗證碼的按鈕
 @param time 倒計的時間
 */
-(void)startTimeWithButton:(UIButton *)sender WithTime:(int)time{
    sender.userInteractionEnabled=NO;//關(guān)閉按鈕的交互
    sender.backgroundColor=[UIColor lightGrayColor];
    [sender setTitleColor:[UIColor colorWithRed:67/255.0 green:67/255.0 blue:67/255.0 alpha:1.0] forState:UIControlStateNormal];

    __block int timeout=time; //倒計時時間
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒執(zhí)行
    
    dispatch_source_set_event_handler(_timer, ^{
        if(timeout<=0){ //倒計時結(jié)束,關(guān)閉
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                //設(shè)置界面的按鈕顯示 根據(jù)自己需求設(shè)置(倒計時結(jié)束后調(diào)用)
                [sender setTitle:@"獲取驗證碼" forState:UIControlStateNormal];
                //設(shè)置可點擊
                sender.userInteractionEnabled = YES;
                //恢復之前的顏色
                [sender setBackgroundColor:[UIColor colorWithRed:72/255.0 green:96/255.0 blue:143/255.0 alpha:1.0]];
                [sender setTitleColor:[UIColor colorWithRed:75/255.0 green:200/255.0 blue:123/255.0 alpha:1.0] forState:UIControlStateNormal];
            });
        }else{//倒計時未結(jié)束
            int seconds = timeout % (time+1);
            NSString *strTime = [NSString stringWithFormat:@"%d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                [sender setTitle:[NSString stringWithFormat:@"重新發(fā)送(%@)",strTime] forState:UIControlStateNormal];
            });
            timeout--;
        }
    });
    dispatch_resume(_timer);
}
演示代碼
- (void)viewDidLoad {
    [super viewDidLoad];
    //倒計時按鈕
    UIButton *btn2=[[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width-200)/2, 200, 200, 30)];
    [btn2 setTitle:@"獲取驗證碼" forState:UIControlStateNormal];
    [btn2 setTitleColor:[UIColor colorWithRed:75/255.0 green:200/255.0 blue:123/255.0 alpha:1.0] forState:UIControlStateNormal];
    btn2.backgroundColor=[UIColor colorWithRed:72/255.0 green:96/255.0 blue:143/255.0 alpha:1.0];
    //設(shè)置圓角
    btn2.layer.masksToBounds=YES;
    btn2.layer.cornerRadius=5.0;
    [btn2 addTarget:self action:@selector(startTime:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn2];
}

-(void)startTime:(UIButton *)sender{
    [self startTimeWithButton:sender WithTime:10];
}

注冊狀態(tài)效果

發(fā)送狀態(tài).gif
封裝的方法:
/**
 按鈕動態(tài)信息提示
 
 @param buttton 需要動態(tài)顯示信息的按鈕
 @param title   動態(tài)顯示的文字
 @param color   顏色
 */
+(void)animateButtonWithButton:(UIButton *)buttton WithTitle:(NSString *)title WithColor:(UIColor *)color{
    CATransition *transition=[[CATransition alloc] init];
    transition.type=kCATransitionPush;
    transition.subtype=kCATransitionFromTop;
    transition.duration=0.5;
    [buttton.titleLabel.layer addAnimation:transition forKey:kCATransition];
    [buttton setTitle:title forState:UIControlStateNormal];
    [buttton setTitleColor:color forState:UIControlStateNormal];
}
演示代碼:

說明:演示代碼和gif的效果是一樣的忠蝗,只是里面的文字不一樣而已现横,大家不要介意!

/**
 確認重置密碼
 */
-(void)resetPassword:(UIButton *)sender{
    [Share animateButtonWithButton:sender WithTitle:@"修改中" WithColor:[UIColor colorWithRed:165/255.0 green:42/255.0 blue:42/255.0 alpha:1]];
    [[請求注冊**********接口保密] withBlock:^(BOOL isSuccessful, id result, NSString *error) {
        if (isSuccessful) {
            NSString *err=[[NSString alloc] initWithFormat:@"%@",[result objectForKey:@"Error"]];
            if (err.length==0) {
                [Share delay:1.5 withBlack:^{
                    [Share animateButtonWithButton:sender WithTitle:@"修改成功" WithColor:[UIColor colorWithRed:238/255.0 green:99/255.0 blue:99/255.0 alpha:1]];
                }];
                [Share delay:2.5 withBlack:^{
                    //                    [寫登錄成功,退出當前頁面的方法];
                }else{
                    [Share delay:1.5 withBlack:^{
                        [Share animateButtonWithButton:sender WithTitle:@"驗證碼錯誤长赞!" WithColor:[UIColor colorWithRed:0/255.0 green:0/255.0 blue:128/255.0 alpha:1]];
                    }];
                    [Share delay:3.0 withBlack:^{
                        [Share animateButtonWithButton:sender WithTitle:@"確 認" WithColor:kGlobalMainColor];
                    }];
                }
          }else{
            [Share delay:1.5 withBlack:^{
            [Share animateButtonWithButton:sender WithTitle:@"請求失敗" WithColor:[UIColor colorWithRed:0/255.0 green:0/255.0 blue:128/255.0 alpha:1]];
                     }];
            [Share delay:3.0 withBlack:^{
                    [Share animateButtonWithButton:sender WithTitle:@"確 認" WithColor:kGlobalMainColor];
                     }];
            }
                 }];
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晦攒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子得哆,更是在濱河造成了極大的恐慌脯颜,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贩据,死亡現(xiàn)場離奇詭異栋操,居然都是意外死亡,警方通過查閱死者的電腦和手機饱亮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門矾芙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人近上,你說我怎么就攤上這事剔宪。” “怎么了壹无?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵葱绒,是天一觀的道長。 經(jīng)常有香客問我斗锭,道長地淀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任岖是,我火速辦了婚禮帮毁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豺撑。我一直安慰自己烈疚,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布聪轿。 她就那樣靜靜地躺著爷肝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屹电。 梳的紋絲不亂的頭發(fā)上阶剑,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天跃巡,我揣著相機與錄音危号,去河邊找鬼。 笑死素邪,一個胖子當著我的面吹牛外莲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼偷线,長吁一口氣:“原來是場噩夢啊……” “哼磨确!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起声邦,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤乏奥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亥曹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邓了,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年媳瞪,在試婚紗的時候發(fā)現(xiàn)自己被綠了骗炉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛇受,死狀恐怖句葵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兢仰,我是刑警寧澤乍丈,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站旨别,受9級特大地震影響诗赌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秸弛,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一铭若、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧递览,春花似錦叼屠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儿捧,卻和暖如春荚坞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背菲盾。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工颓影, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懒鉴。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓诡挂,卻偏偏與公主長得像碎浇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子璃俗,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容