Home WeChat Applet Mini Program Development iOS develops functions similar to Alipay password input box

iOS develops functions similar to Alipay password input box

May 13, 2017 pm 03:48 PM

This article mainly introduces the iOS implementation of a password input box similar to WeChat and Alipay, which provides simple keyboard input functions for responders through the UIKeyInput protocol, and then draws the password input box through CoreGraphics. Interested friends can For reference

Currently, I need to implement the function of sending red envelopes in the project, so I wrote a control for the password input box, mainly using the UIKeyInput protocol and CoreGraphicsframework , the effect is similar to WeChat payment. If it feels good, I will write down my ideas and production process to share with you.

Let your custom View have the input function (UIKeyInput protocol)

The UIKeyInput protocol can provide simple The keyboard input function allows the responder who needs a keyboard to become the first responder. There are three methods that must be implemented in the UIKeyInput protocol, which are the following methods:

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

#pragma mark - UIKeyInput

/**

 * 用于显示的文本对象是否有任何文本

 */

- (BOOL)hasText {

  return self.textStore.length > 0;

}

 

/**

 * 插入文本

 */

- (void)insertText:(NSString *)text {

  if (self.textStore.length < self.passWordNum) {

    //判断是否是数字

    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:MONEYNUMBERS] invertedSet];

    NSString*filtered = [[text componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

    BOOL basicTest = [text isEqualToString:filtered];

    if(basicTest) {

     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.textStore appendString:text];

      [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];

}

 

/**

 * 是否能成为第一响应者

 */

- (BOOL)canBecomeFirstResponder {

  return YES;

}

 

/**

 * 点击成为第一相应者

 */

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

  if (![self isFirstResponder]) {

    [self becomeFirstResponder];

  }

}

Copy after login

Draw the password input box through CoreGraphics

The idea of ​​​​implementation is to draw the password through the CoreGraphics framework The outer frame of the input box and the small black dot inside, and then the number of input digits is determined by the string obtained from the keyboard. The specific implementation is as follows:

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

/**

 * 设置正方形的边长

 */

- (void)setSquareWidth:(CGFloat)squareWidth {

  _squareWidth = squareWidth;

  [self setNeedsDisplay];

}

 

/**

 * 设置键盘的类型

 */

- (UIKeyboardType)keyboardType {

  return UIKeyboardTypeNumberPad;

}

 

/**

 * 设置密码的位数

 */

- (void)setPassWordNum:(NSUInteger)passWordNum {

  _passWordNum = passWordNum;

  [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, 1);

  CGContextSetStrokeColorWithColor(context, self.rectColor.CGColor);

  CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);

  //画竖条

  for (int i = 1; i <= self.passWordNum; i++) {

    CGContextMoveToPoint(context, x+i*self.squareWidth, y);

    CGContextAddLineToPoint(context, x+i*self.squareWidth, y+self.squareWidth);

     CGContextClosePath(context);

  }

  CGContextDrawPath(context, kCGPathFillStroke);

  CGContextSetFillColorWithColor(context, self.pointColor.CGColor);

  //画黑点

  for (int i = 1; i <= self.textStore.length; i++) {

    CGContextAddArc(context, x+i*self.squareWidth - self.squareWidth/2.0, y+self.squareWidth/2, self.pointRadius, 0, M_PI*2, YES);

    CGContextDrawPath(context, kCGPathFill);

  }

}

Copy after login

[Related recommendations]

1. Special recommendation: "php Programmer Toolbox" V0.1 version download

2 . Complete source code download of WeChat Mini Program

3. WeChat Mini Program demo: Guoku updated version

The above is the detailed content of iOS develops functions similar to Alipay password input box. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)