zoukankan      html  css  js  c++  java
  • ios-弹窗输入六位密码

    //
    //  ViewController.m
    //  设置密码
    
    #import "ViewController.h"
    #import "PasswordView.h"
    
    #define Color_RGB(a,b,c,d) [UIColor colorWithRed:(a)/255.0 green:(b)/255.0 blue:(c)/255.0 alpha:(d)]
    #define GrayColor  Color_RGB(236,236,236,1)//headerView 灰
    #define screenWidth [UIScreen mainScreen].bounds.size.width
    #define screenHeight [UIScreen mainScreen].bounds.size.height
    #define RGBACOLOR(a,b,c,d) Color_RGB(a,b,c,d)
    #define Font(a)     [UIFont systemFontOfSize:a];
    #define littleBlackColor  Color_RGB(79,79,79,1)// 字体浅黑
    #define YellowColor  Color_RGB(253,131,42,1)//主题黄
    #define LineGrayColor  Color_RGB(210,210,210,1)//分割线 灰
    
    
    @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,PasswordViewDelegate>
    @property (nonatomic,strong) UITableView *tableView;
    @property (nonatomic,strong) NSMutableArray *dataArray;
    @property (nonatomic,strong) UIView *alphaView;
    @property (nonatomic,strong) NSString *checkString;
    @property (nonatomic,strong) NSString *updateString;
    @property (nonatomic) NSInteger integer;
    
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.view.backgroundColor = GrayColor;
        self.alphaView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
        self.dataArray = [NSMutableArray arrayWithObjects:@"修改提现密码",@"忘记提现密码", nil];
        [self initSubview];
    }
    
    -(void)initSubview{
    
        self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 64, screenWidth, screenHeight) style:UITableViewStyleGrouped];
        self.tableView.delegate = self;
        self.tableView.dataSource = self;
        [self.view addSubview:self.tableView];
    }
    
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
        return 1;
    }
    
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return 2;
    }
    
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *string = @"tradeCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:string];
        if (!cell) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:string];
        }
        
        cell.textLabel.text = self.dataArray[indexPath.row];
        cell.textLabel.font = Font(14);
        cell.textLabel.textColor = littleBlackColor;
        cell.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"personal_arrow"]];
        return cell;
    }
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        self.integer = 1;
        [self initAlphaViewAndString:@"请输入原提现密码"];
    }
    
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 43;
    }
    
    -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        return 0.001;
    }
    -(void)initAlphaViewAndString:(NSString *)string
    {
        
        self.alphaView.backgroundColor = RGBACOLOR(0, 0, 0, 0.3);
        self.alphaView.alpha = 1;
        //    UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
        //    [window addSubview:self.alphaView];
        
        [self.view addSubview:self.alphaView];
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapToDismiss)];
        [self.alphaView addGestureRecognizer:tap];
        
        UIView *whiteV = [[UIView alloc]initWithFrame:CGRectMake(20, 110, screenWidth - 40, 140)];
        whiteV.backgroundColor = [UIColor whiteColor];
        
        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(20, 25, screenWidth - 80, 15)];
        label.textColor = YellowColor;
        label.text = string;
        label.font = Font(12);
        [whiteV addSubview:label];
        
        PasswordView *password = [[PasswordView alloc]initWithFrame:CGRectMake(20, CGRectGetMaxY(label.frame) + 20, screenWidth - 80, 43)];
        [whiteV addSubview:password];
        password.layer.borderColor = LineGrayColor.CGColor;
        password.layer.borderWidth = 0.5;
        password.delegate = self;
        password.backgroundColor = [UIColor whiteColor];
        
        [self.alphaView addSubview:whiteV];
        
        
        CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
        animation.duration = 0.5;
        
        NSMutableArray *values = [NSMutableArray array];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.8, 0.8, 1.0)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 1.0)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
        animation.values = values;
        [whiteV.layer addAnimation:animation forKey:nil];
    }
    
    -(void)tapToDismiss{
        
        [UIView animateWithDuration:0.2 animations:^{
            [self.alphaView endEditing:YES];
            
            self.alphaView.alpha = 0;
        } completion:^(BOOL finished) {
            [self.alphaView removeFromSuperview];
        }];
    }
    
    #pragma mark PasswordView Delegate
    -(void)passWordDidChange:(PasswordView *)password
    {
        NSLog(@"改变%@",password.textStore);
    }
    
    -(void)passWordBeginInput:(PasswordView *)password
    {
        NSLog(@"开始输入%@",password.textStore);
    }
    
    -(void)passWordCompleteInput:(PasswordView *)password
    {
        NSLog(@"输入完成%@",password.textStore);
        
        if (password.textStore.length == 6 && self.integer == 1) {
            
            self.checkString = password.textStore;
            //延迟执行
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self checkPassword];
            });
        }
        if (password.textStore.length == 6 && self.integer == 2) {
            
            self.updateString = password.textStore;
            //延迟执行
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self updatePassword];
            });
        }  
    }
    
    //验证原始密码
    -(void)checkPassword
    {
        [self tapToDismiss];
        NSLog(@"验证原始密码");
    }
    
    //更改密码
    -(void)updatePassword
    {
        [self tapToDismiss];
        NSLog(@"更改密码");
    }
    @end
    //
    //  PasswordView.h
    #import <UIKit/UIKit.h>
    @class PasswordView;
    
    @protocol PasswordViewDelegate<NSObject>
    
    -(void)passWordDidChange:(PasswordView *)password;
    
    -(void)passWordCompleteInput:(PasswordView *)password;
    
    -(void)passWordBeginInput:(PasswordView *)password;
    
    @end
    
    @interface PasswordView : UIView<UIKeyInput>
    
    @property (nonatomic) NSInteger passWordNum;//密码的位数
    @property (nonatomic) CGFloat squareWidth;//密码框的大小
    @property (nonatomic) CGFloat pointRadius;//黑点半径
    @property (nonatomic) UIColor *pointColor;//黑点颜色
    @property (nonatomic) UIColor *rectColor;//边框颜色
    @property (nonatomic) id<PasswordViewDelegate> delegate;//
    @property (nonatomic,readonly,strong) NSMutableString *textStore;//保存密码的字符串
    
    @end
    //
    //  PasswordView.m
    
    #import "PasswordView.h"
    
    #define Color_RGB(a,b,c,d) [UIColor colorWithRed:(a)/255.0 green:(b)/255.0 blue:(c)/255.0 alpha:(d)]
    #define LineGrayColor  Color_RGB(210,210,210,1)//分割线 灰
    #define BlackColor [UIColor blackColor]
    
    @interface PasswordView ()
    
    @property (nonatomic,strong) NSMutableString *textStore;
    
    @end
    
    @implementation PasswordView
    
    static NSString  * const MONEYNUMBERS = @"0123456789";
    
    
    
    -(instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            
            self.textStore = [NSMutableString string];
            self.squareWidth = frame.size.width/6.0;
            self.passWordNum = 6;
            self.pointRadius = 6;
            self.rectColor = LineGrayColor;
            self.pointColor = BlackColor;
            [self becomeFirstResponder];
        }
        
        return  self;
    }
    
    
    /**
     * 设置密码框边长
     */
    -(void)setSquareWidth:(CGFloat)squareWidth
    {
        _squareWidth = squareWidth;
        [self setNeedsDisplay];
    }
    
    /**
     * 设置键盘类型
     */
    
    -(UIKeyboardType)keyboardType
    {
        return UIKeyboardTypeNumberPad;
    }
    
    /**
     *  设置密码位数
     *
     */
    
    -(void)setPassWordNum:(NSInteger)passWordNum
    {
        _passWordNum = passWordNum;
        [self setNeedsDisplay];
    }
    
    -(BOOL)becomeFirstResponder
    {
        if ([self.delegate respondsToSelector:@selector(passWordBeginInput:)]) {
            [self.delegate passWordBeginInput:self];
        }
        
        return [super becomeFirstResponder];
    }
    
    /**
     *  是否成为第一响应者
     *
     */
    -(BOOL)canBecomeFirstResponder
    {
        return YES;
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        if (![self isFirstResponder]) {
            [self becomeFirstResponder];
        }
    }
    
    #pragma mark - UIKeyInput
    /**
     * 用于显示的文本对象是否有任何文本
     */
    -(BOOL)hasText
    {
        return self.textStore.length > 0;
    }
    
    /**
     *插入文本
     */
    -(void)insertText:(NSString *)text
    {
        if (self.textStore.length < self.passWordNum) {
            
            //判断是否有数字
            NSCharacterSet *character = [[NSCharacterSet characterSetWithCharactersInString:MONEYNUMBERS] invertedSet];
            
            NSString *filter = [[text componentsSeparatedByCharactersInSet:character] componentsJoinedByString:@""];
    
            BOOL basicTest = [text isEqualToString:filter];
            if (basicTest) {
                [self.textStore appendString:text];
                if ([self.delegate respondsToSelector:@selector(passWordDidChange:)]) {
                    [self.delegate passWordDidChange:self];
                }
                
                if (self.textStore.length == self.passWordNum) {
                    if ([self.delegate respondsToSelector:@selector(passWordCompleteInput:)]) {
                        [self.delegate passWordCompleteInput:self];
                    }
                }
                [self setNeedsDisplay];
                
            }
            
        }
    }
    
    //删除文本
    -(void)deleteBackward
    {
        if (self.textStore.length > 0) {
            [self.textStore deleteCharactersInRange:NSMakeRange(self.textStore.length - 1, 1)];
            if ([self.delegate respondsToSelector:@selector(passWordDidChange:)]) {
                [self.delegate passWordDidChange:self];
            }
        }
        
        [self setNeedsDisplay];
    }
    
    -(void)drawRect:(CGRect)rect
    {
        CGFloat height = rect.size.height;
        CGFloat width = rect.size.width;
        
        CGFloat x = (width - self.squareWidth * self.passWordNum)/2.0;
        CGFloat y = (height - self.squareWidth)/2.0;
        
        CGContextRef context = UIGraphicsGetCurrentContext();
    //    //画外框
    ////    
    //    CGContextAddRect(context, CGRectMake(x, y, self.squareWidth * self.passWordNum, self.squareWidth));
        CGContextSetLineWidth(context, 0.5);
        CGContextSetStrokeColorWithColor(context, self.rectColor.CGColor);
    //    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    //
        //画竖条
        for (int i = 1; i < self.passWordNum; i ++) {
            CGContextMoveToPoint(context, x + self.squareWidth * i, y);
            CGContextAddLineToPoint(context, x + self.squareWidth * i, y + self.squareWidth);
            CGContextClosePath(context);
        }
        
        CGContextDrawPath(context, kCGPathStroke);
        CGContextSetFillColorWithColor(context, self.pointColor.CGColor);
        
        //画黑点
        for (int i = 1; i <= self.textStore.length; i++) {
            CGContextAddArc(context, x + self.squareWidth * i - self.squareWidth/2.0, y + self.squareWidth/2.0, self.pointRadius, 0, M_PI * 2, YES);
            CGContextDrawPath(context, kCGPathFill);
        }
    }
    
    
    
    @end
  • 相关阅读:
    设计模式---适配器模式
    【面经】2019-4-1 杭州边锋网络面经
    web前端基础——jQuery编程进阶
    web前端基础——jQuery编程基础
    web前端基础——初识HTML DOM编程
    web前端基础——初识JavaScript
    web前端基础——初识CSS
    web前端基础——初识HTML
    CentOS 6.5上安装python2.7、pip以及Python命令行补全和yum冲突解决
    Python中常用技巧整理
  • 原文地址:https://www.cnblogs.com/sayimba/p/6346606.html
Copyright © 2011-2022 走看看