現(xiàn)在、プロジェクトに赤い封筒を送信する機(jī)能を?qū)g裝する必要があるので、主に UIKeyInput プロトコルと CoreGraphics フレームワークを使用して、パスワード入力ボックス コントロールを作成しました。効果が WeChat 支払いに似ていると感じたら、実行します。私のアイデアと制作プロセスを書き留めておきます。
カスタム ビューに入力機(jī)能 (UIKeyInput プロトコル) を持たせます
UIKeyInput プロトコルは、レスポンダーに簡単なキーボード入力機(jī)能を提供し、キーボードを必要とするレスポンダーをファーストレスポンダーにさせるだけです。 UIKeyInput プロトコルで実裝する必要があるメソッドは 3 つあり、次のメソッドです:
#pragma mark - UIKeyInput /** * 用于顯示的文本對(duì)象是否有任何文本 */ - (BOOL)hasText { return self.textStore.length > 0; } /** * 插入文本 */ - (void)insertText:(NSString *)text { if (self.textStore.length < self.passWordNum) { //判斷是否是數(shù)字 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]; } /** * 是否能成為第一響應(yīng)者 */ - (BOOL)canBecomeFirstResponder { return YES; } /** * 點(diǎn)擊成為第一相應(yīng)者 */ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { if (![self isFirstResponder]) { [self becomeFirstResponder]; } }
CoreGraphics を使用してパスワード入力ボックスを描畫します
実裝のアイデアは、パスワード入力ボックスの外枠を描畫し、 CoreGraphics フレームワークを介して內(nèi)部の小さな黒い點(diǎn)を使用し、キーボードから取得した文字列から入力桁數(shù)を決定します。具體的な実裝は次のとおりです。
/** * 設(shè)置正方形的邊長 */ - (void)setSquareWidth:(CGFloat)squareWidth { _squareWidth = squareWidth; [self setNeedsDisplay]; } /** * 設(shè)置鍵盤的類型 */ - (UIKeyboardType)keyboardType { return UIKeyboardTypeNumberPad; } /** * 設(shè)置密碼的位數(shù) */ - (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); //畫黑點(diǎn) 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); } }
以上がこの記事の內(nèi)容です。皆様の學(xué)習(xí)に役立つとともに、皆様にも PHP 中國語 Web サイトをサポートしていただければ幸いです。
WeChat や Alipay 関連の記事と同様のパスワード入力ボックス (UIKeyInput プロトコル) の iOS 実裝については、PHP 中國語 Web サイトに注目してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)