绘图
iOS中的绘图有很多种方式,我们这里简单说一下Core Graphics的画图
UITouch *touch = [touches anyObject];
// 移动的点
CGPoint point = [touch locationInView:self.view];
// 创建一个画板
UIGraphicsBeginImageContext(CGSizeMake(320, 480));
// 获取当前的画板
CGContextRef context = UIGraphicsGetCurrentContext();
[imageView drawRect:CGRectMake(0, 0, 320, 480)];
// 设置画笔的颜色
CGContextSetRGBStrokeColor(context, 1, 1, 1, 1);
// 设置线条的宽度
CGContextSetLineWidth(context, 10);
// 设置线条样式
CGContextSetLineCap(context, kCGLineCapRound);
// 把画笔移到某一个点
CGContextMoveToPoint(context, firstPoint.x, firstPoint.y);
// 从开始点 到哪个点之间形成一条线
CGContextAddLineToPoint(context, point.x, point.y);
// 把描的路径画出来
CGContextStrokePath(context);
// 把刚才画的东西 形成一张图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
imageView.image = image;
这就是一个获取手指移动轨迹的画图方式。
通讯录
在开发中我们难免会用到使用系统app信息,比如我们要使用通讯录,就用以下的方法
- (void)test{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
//获取应用的授权状态
ABAuthorizationStatus authorizationStatus = ABAddressBookGetAuthorizationStatus();
//判断授权状态
switch (authorizationStatus){
case kABAuthorizationStatusNotDetermined:{
//用户还没有作出关于这个应用程序是否可以访问数据类的选择。
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
NSLog(@"%d", granted);
});
}
break;
case kABAuthorizationStatusRestricted:{
//应用没有被授权访问数据类。用户不能改变 例如家长控制
}
break;
case kABAuthorizationStatusDenied:{
//用户明确拒绝此应用程序访问数据。
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"请在iPhone的设置->隐私->通讯录中开启授权" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"设置", nil];
[alertView show];
}
break;
case kABAuthorizationStatusAuthorized:{
//已经授权
}
break;
default:
break;
}
// 释放通讯录对象
CFRelease(addressBook);
}
#pragma mark -
// 获得通讯录中所有联系人的所有属性
- (IBAction)getAllPerson:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
NSLog(@"addressBooK %@",addressBook);
CFArrayRef allPerson = ABAddressBookCopyArrayOfAllPeople(addressBook);
for (int i = 0; i < CFArrayGetCount(allPerson); i++){
// 取出一个联系人
ABRecordRef aPerson = CFArrayGetValueAtIndex(allPerson, i);
// 读取firstname
NSString *firstName = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonFirstNameProperty);
NSLog(@"firstName %@",firstName);
// 读取lastname
NSString *lastname = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonLastNameProperty);
NSLog(@"lastname %@",lastname);
// 读取middlename
NSString *middlename = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonMiddleNameProperty);
NSLog(@"middlename %@",middlename);
// 读取nickname呢称
NSString *nickname = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonNicknameProperty);
NSLog(@"nickname %@",nickname);
// 读取organization公司
NSString *organization = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonOrganizationProperty);
NSLog(@"organization %@",organization);
// 读取jobTitle工作
NSString *jobTitle = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonJobTitleProperty);
NSLog(@"jobTitle %@",jobTitle);
// 读取department部门
NSString *department = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonDepartmentProperty);
NSLog(@"department %@",department);
// 读取birthday生日
NSDate *birthday = (__bridge NSDate *)ABRecordCopyValue(aPerson, kABPersonBirthdayProperty);
NSLog(@"birthday %@",birthday);
// 读取note备忘录
NSString *note = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonNoteProperty);
NSLog(@"note %@",note);
// 创建该条记录的时间
NSString *creationDate = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonCreationDateProperty);
NSLog(@"creationDate %@",creationDate);
// 最后一次修改该条记录的时间
NSString *modificationDate = (__bridge NSString *)ABRecordCopyValue(aPerson, kABPersonModificationDateProperty);
NSLog(@"modificationDate %@",modificationDate);
// 获取email多值
ABMultiValueRef email = ABRecordCopyValue(aPerson, kABPersonEmailProperty);
for (int x = 0; x < ABMultiValueGetCount(email); x++){
// 获取email标签
NSString *emailLabel = (__bridge NSString *)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(email, x));
NSLog(@"emailLabel %@",emailLabel);
// 获取email值
NSString *emailContent = (__bridge NSString *)ABMultiValueCopyValueAtIndex(email, x);
NSLog(@"emailContent %@",emailContent);
}
// 获取地址多值
ABMultiValueRef address = ABRecordCopyValue(aPerson, kABPersonAddressProperty);
for(int j = 0; j < ABMultiValueGetCount(address); j++){
// 获取地址标签
NSString *addressLabel = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(address, j);
NSLog(@"addressLabel %@",addressLabel);
// 获取该标签下的地址的属性
NSDictionary* personaddress =(__bridge NSDictionary *) ABMultiValueCopyValueAtIndex(address, j);
// 国家
NSString *country = [personaddress valueForKey:(NSString *)kABPersonAddressCountryKey];
NSLog(@"country %@",country);
// 城市
NSString *city = [personaddress valueForKey:(NSString *)kABPersonAddressCityKey];
NSLog(@"city %@",city);
// 省份
NSString *state = [personaddress valueForKey:(NSString *)kABPersonAddressStateKey];
NSLog(@"state %@",state);
// 街道
NSString *street = [personaddress valueForKey:(NSString *)kABPersonAddressStreetKey];
NSLog(@"street %@",street);
// 邮编
NSString *zip = [personaddress valueForKey:(NSString *)kABPersonAddressZIPKey];
NSLog(@"zip %@",zip);
// 国家编号
NSString *coutntrycode = [personaddress valueForKey:(NSString *)kABPersonAddressCountryCodeKey];
NSLog(@"coutntrycode %@",coutntrycode);
}
// 获取dates多值
ABMultiValueRef dates = ABRecordCopyValue(aPerson, kABPersonDateProperty);
for (int y = 0; y < ABMultiValueGetCount(dates); y++){
//获取dates标签
NSString *datesLabel = (__bridge NSString *)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(dates, y));
NSLog(@"datesLabel %@",datesLabel);
//获取dates值
NSString *datesContent = (__bridge NSString *)ABMultiValueCopyValueAtIndex(dates, y);
NSLog(@"datesContent %@",datesContent);
}
//获取kind值
CFNumberRef recordType = ABRecordCopyValue(aPerson, kABPersonKindProperty);
if (recordType == kABPersonKindOrganization){
// it's a company
NSLog(@"it's a company");
}else{
// it's a person, resource, or room
NSLog(@"it's a person, resource, or room");
}
// 获取IM多值
ABMultiValueRef instantMessage = ABRecordCopyValue(aPerson, kABPersonInstantMessageProperty);
for (int l = 1; l < ABMultiValueGetCount(instantMessage); l++){
//获取IM标签
NSString *instantMessageLabel = (__bridge NSString *)ABMultiValueCopyLabelAtIndex(instantMessage, l);
NSLog(@"instantMessageLabel %@",instantMessageLabel);
//获取该标签下的属性
NSDictionary *instantMessageContent =(__bridge NSDictionary *) ABMultiValueCopyValueAtIndex(instantMessage, l);
// 用户名
NSString *username = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageUsernameKey];
NSLog(@"username %@",username);
// 服务
NSString *service = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageServiceKey];
NSLog(@"service %@",service);
}
// 获取电话多值
ABMultiValueRef phone = ABRecordCopyValue(aPerson, kABPersonPhoneProperty);
for (int k = 0; k < ABMultiValueGetCount(phone); k++){
//获取电话标签
NSString *personPhoneLabel = (__bridge NSString *)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, k));
NSLog(@"personPhoneLabel %@",personPhoneLabel);
//获取该标签下的电话值
NSString *personPhone = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phone, k);
NSLog(@"personPhone %@",personPhone);
}
//获取URL多值
ABMultiValueRef url = ABRecordCopyValue(aPerson, kABPersonURLProperty);
for (int m = 0; m < ABMultiValueGetCount(url); m++){
//获取电话Label
NSString *urlLabel = (__bridge NSString *)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(url, m));
NSLog(@"urlLabel %@",urlLabel);
//获取該Label下的电话值
NSString *urlContent = (__bridge NSString *)ABMultiValueCopyValueAtIndex(url,m);
NSLog(@"urlContent %@",urlContent);
}
//读取照片
NSData *image = (__bridge NSData*)ABPersonCopyImageData(aPerson);
// 显示到imageView上
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
imageView.image = [UIImage imageWithData:image];
[self.view addSubview:imageView];
}
// 释放数组
CFRelease(allPerson);
// 释放通讯录对象
CFRelease(addressBook);
}
// 获取某一个联系人的信息
- (IBAction)getPersonInfo:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 联系人的名字
// CFStringRef name = CFSTR("张三");
CFStringRef name = CFStringCreateWithCString( kCFAllocatorDefault, [@"张三" UTF8String], kCFStringEncodingUTF8);
// 获取到改名字的联系人 (可能有相同名字的联系人,所以返回数组)
CFArrayRef array = ABAddressBookCopyPeopleWithName(addressBook, name);
// 如果数组不为空
if(CFArrayGetCount(array) > 0){
// 取出数组中第0个人
ABRecordRef aPerson = CFArrayGetValueAtIndex(array,0);
// 获取名字
CFStringRef name = ABRecordCopyValue(aPerson, kABPersonFirstNameProperty);
NSLog(@"name %@",name);
// 获取所有的电话信息
ABMultiValueRef allPhone = ABRecordCopyValue(aPerson, kABPersonPhoneProperty);
// 如果有电话信息
if (ABMultiValueGetCount(allPhone) > 0){
// 获取第0个电话的类型:(比如 工作,住宅,iphone,移动电话等)
CFStringRef label = ABMultiValueCopyLabelAtIndex(allPhone,0);
NSLog(@"label %@",label);
// 获取第0个电话号码
CFStringRef number = ABMultiValueCopyValueAtIndex(allPhone,0);
NSLog(@"number %@",number);
}
}
// 释放通讯录对象
CFRelease(addressBook);
}
// 添加一个联系人信息
- (IBAction)addPersonInfo:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 创建一个空的联系人
ABRecordRef aPerson = ABPersonCreate();
// 用来接收错误信息
CFErrorRef error = NULL;
// 把FirstName写进联系人
ABRecordSetValue(aPerson, kABPersonFirstNameProperty, @"周", &error);
// LastName
ABRecordSetValue(aPerson, kABPersonLastNameProperty, @"杰伦", &error);
// 公司
ABRecordSetValue(aPerson, kABPersonOrganizationProperty, @"他的公司", &error);
// FirstName发音
ABRecordSetValue(aPerson, kABPersonFirstNamePhoneticProperty, @"zhou", &error);
// LastName发音
ABRecordSetValue(aPerson, kABPersonLastNamePhoneticProperty, @"jielun", &error);
// 创建一个集合,用来保存接下来要添加的号码
ABMultiValueRef phoneArray =ABMultiValueCreateMutable(kABMultiStringPropertyType);
// 添加移动号码0
ABMultiValueAddValueAndLabel(phoneArray, @"13800138000",kABPersonPhoneMobileLabel, NULL);
// 添加iphone号码1
ABMultiValueAddValueAndLabel(phoneArray, @"18688888888",kABPersonPhoneIPhoneLabel, NULL);
// ......可以继续添加多个号码
// 把添加的所有号码写进联系人
ABRecordSetValue(aPerson, kABPersonPhoneProperty, phoneArray, &error);
// 创建一个集合,用来保存接下来要添加的邮箱
ABMutableMultiValueRef emailArray = ABMultiValueCreateMutable(kABMultiStringPropertyType);
// 添加工作的邮箱
ABMultiValueAddValueAndLabel(emailArray, @"123123@qq.com", kABWorkLabel, NULL);
// 把添加的邮箱写进联系人
ABRecordSetValue(aPerson, kABPersonEmailProperty, emailArray, &error);
// 添加图片
NSData *data = UIImagePNGRepresentation([UIImage imageNamed:@"image1.jpg"]);
ABPersonSetImageData(aPerson, (__bridge CFDataRef)data, &error);
// 把联系人信息写入通讯录
ABAddressBookAddRecord(addressBook, aPerson, &error);
// 保存一下
ABAddressBookSave(addressBook, &error);
// 释放各数据
CFRelease(phoneArray);
CFRelease(emailArray);
CFRelease(aPerson);
CFRelease(addressBook);
}
// 删除联系人
- (IBAction)deletePerson:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 创建一个人名
CFStringRef name = CFStringCreateWithCString(kCFAllocatorDefault, [@"周" UTF8String], kCFStringEncodingUTF8);
// 找到这个人,可能是多个
CFArrayRef array = ABAddressBookCopyPeopleWithName(addressBook, name);
if(CFArrayGetCount(array) > 0){
// 取出第0个
ABRecordRef aPerson = CFArrayGetValueAtIndex(array,0);
CFErrorRef error = NULL;
// 删除这个人
ABAddressBookRemoveRecord(addressBook, aPerson, &error);
// 保存一下
ABAddressBookSave(addressBook, &error);
}
// 释放通讯录对象
CFRelease(addressBook);
}
// 获取所有组
- (IBAction)getAllGroup:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 所有分组
CFArrayRef groupArray = ABAddressBookCopyArrayOfAllGroups(addressBook);
for (id group in (__bridge NSArray *)groupArray){
NSString *groupName = (__bridge NSString *)(ABRecordCopyValue((__bridge ABRecordRef)(group), kABGroupNameProperty));
NSLog(@"groupName %@",groupName);
int groupID = ABRecordGetRecordID((__bridge ABRecordRef)(group));
NSLog(@"groupID %d",groupID);
}
// 释放通讯录对象
CFRelease(addressBook);
}
// 添加组
- (IBAction)addGroup:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 创建一个新的分组
ABRecordRef newGroup = ABGroupCreate();
// 添加分组名称
ABRecordSetValue(newGroup, kABGroupNameProperty, @"测试分组2", NULL);
// 把分组信息写入通讯录
ABAddressBookAddRecord(addressBook, newGroup, NULL);
// 保存刚才的修改
ABAddressBookSave(addressBook, NULL);
// 释放对象
CFRelease(newGroup);
CFRelease(addressBook);
}
// 删除组
- (IBAction)deleteGroup:(id)sender{
//读取手机通讯录
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 所有分组
CFArrayRef groupArray = ABAddressBookCopyArrayOfAllGroups(addressBook);
for (id group in (__bridge NSArray *)groupArray){
NSString *groupName = (__bridge NSString *)(ABRecordCopyValue((__bridge ABRecordRef)(group), kABGroupNameProperty));
if ([groupName isEqualToString:@"测试分组2"]){
// 删除这个组
ABAddressBookRemoveRecord(addressBook, (__bridge ABRecordRef)(group), NULL);
// 保存一下
ABAddressBookSave(addressBook, NULL);
}
}
// 释放通讯录对象
CFRelease(addressBook);
}
尽管上面的方法已经被标注过时了,新方法以后再研究吧~