iOS学习笔记(三十五)————画图与通讯录

/ 0评 / 0

绘图

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);
}

尽管上面的方法已经被标注过时了,新方法以后再研究吧~

代码请查看 http://git.oschina.net/zcb1603999/LearningiOS

评论已关闭。