0%

  • 15 分钟支付倒计时
// 支付倒计时
- (void)secondsCountDown:(UILabel *)label {
    __block int timeout = 900;
    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);//每秒执行
    dispatch_source_set_event_handler(_timer, ^{
        if (timeout<=0) {
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                // 隐藏密码输入界面,禁用支付按钮
                [MBProgressHUD showMessage:@"付款超时,请返回重新选择座位"];
            });
        }else {
            int minutes = timeout/60;
            int seconds = timeout%60;
            NSString *strTime = [NSString stringWithFormat:@"%d 分 %d 秒", minutes, seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                label.text = [NSString stringWithFormat:@"请在 %@ 内完成付款,晚了座位就没有了哦",strTime];
            });
            timeout--;
        }
    });
    dispatch_resume(_timer);
}

参考

  • iOS 中常用的验证码倒计时,支付半小时倒计时.

NSMutableString


  • NSString 字符串的内容定义以后无法修改,是不可变的。
  • NSMutableString 是可变字符串,可以修改字符串中的内容.
  • NSMutableString 继承自 NSString, NSString 所有的方法都能使用.
创建字符串
//initWithString
NSMutableString *ms2 = [[NSMutableString alloc] initWithString:@"abcdefg"];

//stringWithFormat:父类类方法创建
NSMutableString *ms3 = [NSMutableString stringWithFormat:@"abcdefg" ];
插入字符串
[ms3 insertString:@"插入字符" atIndex:1]; //@"a插入字符bcdefg"
追加字符串
[ms3 appendString:@"对象"]; //@"abcdefg对象"
删除修改字符串
NSRange rg = NSMakeRange(3,4);
NSRange rg = [ms3 rangeOfString:@"字符"]; //同上,原@“a插入字符bcdefg”
[ms3 deleteCharactersInRange:rg];  //@“a插入bcdefg”
替换字符串
NSRange rg3 = [ms3 rangeOfString:@"字符"];
[ms3 replaceCharactersInRange:rg3 withString:@"字母"]; //字符——>字母

NSMutableArray

推荐阅读

  • iOS 实录 12:NSMutableArray 使用中忽视的问题

  • NSMutableArray 是可变数组,数组中存储空间是可以动态修改,可以添加、删除或对指针重新进行排序。

  • NSMutableArray 继承于 NSArray, NSArray 的方法都可以使用,。

数组的创建

Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Person *p3 = [[Person alloc] init];

//1.初始化时添加元素
NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:p1,p2,p3, nil];

//2.创建空数组,再往里面添加
NSMutableArray *mArray2 = [[NSMutableArray alloc] init];
// 类方法
NSMutableArray *mArray21 = [NSMutableArray array];

//3.创建数组时,同时为数组分配3个存储空间,当3个空间全满之后,会自动扩展空间。
NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithCapacity:3];
阅读全文 »

变量命名规范

名称必须以字母下划线(_)开头,之后可以是任何(大写或小写)字母、下划线或者 0~9 之间的数字组合。

合法名称:

  • price、isEqual、_number、myBook、abc_AE86、

非法名称:

  • sum$value——$ 是一个非法字符。
  • piece flag—— 名称中间不允许有空格。
  • 3Spencer—— 名称不能以数字开头。
  • int—— 不可使用保留字。

规范的变量名命名方式:

  • 小写字母开头。
  • 名称中的新单词用大写字母开头。
    例:currentDate、businessType、name、idNumber、
阅读全文 »

NSArray

  • NSArray 实例可以保存一组 (指向其他对象的) 指针
  • NSArray 的实例是无法改变的。一旦 NSArray 实例被创建后,就无法添加或删除数组里的指针,也无法改变数组的指针顺序;
  • 数组是个数据容器,可以往该容器里任意添加多个对象;
  • 数组中只能存放 对象类型 , 不能存放基本数据类型;
  • 数组中存入对象的类型需要一致;
  • NSArray 中的指针是有序排列的,可以通过索引(index)存取数组中的对象;
  • 注意数组越界。
阅读全文 »

框架

  • 框架(famework):是由许多相关的类、函数、常量以及数据类型组成的库。
  • 编写 Objective-C 程序时,要使用 Foundation 框架,该框架包含了很多基础类。

对象

阅读全文 »

#import "ViewController.h"
// 导入加密功能的头文件
#import <CommonCrypto/CommonDigest.h>

/**
 演示系统自带的md5加密功能。
 */
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 定义一个字符串对象
    NSString *str = @"Hello Apple!";
    // 将字符串对象转换为C语言字符
    const char *representation = [str UTF8String];

    // 创建一个标准长度的字符串
    unsigned char md5[CC_MD5_DIGEST_LENGTH];
    // 对C语言字符串进行加密,并将结果存入变量
    CC_MD5(representation, strlen(representation), md5);

    // 创建一个可变的字符串变量
    NSMutableString *mutableStr = [NSMutableString string];
    for (int i = 0; i < 16; i++) {
        // 通过遍历该变量,将加密后的结果,存入可变字符串
        [mutableStr appendFormat:@"%02X",md5[i]];
    }
    NSLog(@"%@",mutableStr);
}

UIImagePickerController

UIImagePickerController 类用于管理可定制的,基于系统支持的用户界面,用于在支持的设备上拍摄照片和电影,并且在你的 app 中为用户保存照片和电影。 图像选择器控制器管理用户交互并将这些交互的结果传递给委托对象。

使用步骤:

需要导入包:import <MobileCoreServices/MobileCoreServices.h>;
拍摄视频需要导入包:#import <AssetsLibrary/AssetsLibrary.h>
需要遵循的协议:<UINavigationControllerDelegate,UIImagePickerControllerDelegate>;

1️⃣ 创建 UIImagePickerController 对象

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
阅读全文 »

UIView

1. UIView 视图的基本使用

在根视图里添加两个子视图;

CGRect rect1 = CGRectMake(30, 50, 200, 200);
UIView *view1 = [[UIView alloc] initWithFrame:rect1];
[view1 setBackgroundColor:[UIColor brownColor]];

CGRect rect2 = CGRectMake(60, 90, 200, 200);
UIView *view2 = [[UIView alloc] initWithFrame:rect2];
[view2 setBackgroundColor:[UIColor purpleColor]];
[view2 setAlpha:0.5];

[self.view addSubview:view1];
[self.view addSubview:view2];
阅读全文 »