iOS 使用NSUserDefaults存取头像
来源:互联网 发布:access数据库教程视频 编辑:程序博客网 时间:2024/06/05 07:47
本文将实现功能:
在应用的个人设置页面从相册或者拍照获取一张头像,并将这张头像照片保存在nsuserdefaults中,返回到了个人中心页面后,再从nsuserdefaults取出该头像显示在页面。
- 显示拍照/从相册选择的UIAlertController,让用户选择某种获取头像的方式
#pragma mark 更换头像点击-(void)userIconChange{ UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:@"更换头像" message:@"拍照或从相册中选择" preferredStyle:UIAlertControllerStyleActionSheet]; [actionSheetController addAction:[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [self takePhoto]; }]]; [actionSheetController addAction:[UIAlertAction actionWithTitle:@"打开相册" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { [self LocalPhoto]; }]]; [actionSheetController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:actionSheetController animated:YES completion:^{ }];}
- 分别实现拍照方式和从相册选择方式的回调方法如下:
/** * 从相册选择照片 */-(void)LocalPhoto{ UIImagePickerController *picker = [[UIImagePickerController alloc] init]; /* 资源类型为图片库 */ picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.delegate = self; /* 设置选择后的图片可被编辑 */ picker.allowsEditing = YES; [self presentViewController:picker animated:YES completion:^{ }];}/** * 拍照 */-(void)takePhoto{ /* 资源类型为照相机 */ UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; UIImagePickerControllerQualityType qualityType = UIImagePickerControllerQualityTypeHigh; /* 判断是否有相机 */ if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; /* 设置拍照后的图片可被编辑 */ picker.allowsEditing = YES; /* 资源类型为照相机 */ picker.sourceType = sourceType; /* 品质为高 */ picker.videoQuality = qualityType; [self presentViewController:picker animated:YES completion:^{ }]; } else { NSLog(@"该设备无摄像头"); }}
- 然后实现两种方式都会执行的回调方法,在该回调方法中做3件事,第一是将获取到的image转换成data,第二是将该data保存在nsuserdefaults中方便下次获取,第三是将该image显示在当前页面。该回调方法如下:
/** * 图像选取器的委托方法,选完图片后回调该方法 */-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo{ /* 当图片不为空时显示图片并保存图片 */ if (image != nil) { /* 图片显示在界面上 */ // [_iconButton setBackgroundImage:image forState:UIControlStateNormal]; // 显示在按钮上 /* 以下是保存文件到沙盒路径下 */ /* 把图片转成NSData类型的数据来保存文件 */ NSData *data; /* 判断图片是不是png格式的文件 */ if (UIImagePNGRepresentation(image)) { /* 返回为png图像 */ data = UIImagePNGRepresentation(image); } else { /* 返回为JPEG图像 */ data = UIImageJPEGRepresentation(image, 1.0); } /* 保存 */ [LoginState saveUserInfoToUserdefaults:UserHeadImage andInfo:data];// 将图片显示在界面上 _headImage = [UIImage imageWithData:data]; [self.tableView reloadData]; } /* 关闭相册界面 */ [picker dismissViewControllerAnimated:YES completion:^{ }];}
- 然后,在上一步中保存用到的[LoginState saveUserInfoToUserdefaults:UserHeadImage andInfo:data];方法是一个需要自己实现的类方法,我定义在了工具类LoginState中,具体实现如下:
/** * 保存指定类型用户信息到userDefaults */+(void)saveUserInfoToUserdefaults:(InfoTypeIndex)type andInfo:(NSObject *)userInfo{ // 使用NSUserDefaults来保存用户数据 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; switch (type) { case UserHeadImage: [userDefaults setObject:userInfo forKey:@"UserHeadImage"]; break; case UserName: [userDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:userInfo] forKey:@"UserName"]; break; default: break; } [userDefaults synchronize];}/** * 取出指定类型用户信息到userDefaults */+(NSObject *)takeUserInfoToUserdefaults:(InfoTypeIndex)type{ // 使用NSUserDefaults来保存用户数据 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSData *infoData; NSObject *userInfo; switch (type) { case UserHeadImage: infoData = [userDefaults dataForKey:@"UserHeadImage"]; userInfo = [UIImage imageWithData:infoData]; break; case UserName: infoData = [userDefaults dataForKey:@"UserName"]; userInfo = [[NSString alloc] initWithData:infoData encoding:NSUTF8StringEncoding]; break; default: break; } return userInfo;}
- 当下次调到需要显示头像的页面的时候,只要这样调用就可以获取到头像了:
UIImage *head = (UIImage *)[LoginState takeUserInfoToUserdefaults:UserHeadImage];
- 由于是公司的应用,这里不方便附上效果图。这里把我这里用到的LoginState工具类上传,方便大家下载直接使用。写文章不易,但更难得的是分享的精神,如果觉得好,请给本文点个赞,Thanks a lot~
以下是csdn下载链接:
http://download.csdn.net/detail/u012320459/9574431
3 0
- iOS 使用NSUserDefaults存取头像
- 本地存取 NSUserDefaults ios
- iOS SDK: 使用NSUserDefaults
- iOS SDK: 使用NSUserDefaults
- iOS SDK: 使用NSUserDefaults
- iOS SDK: 使用NSUserDefaults
- iOS - NSUserDefaults的使用
- iOS SDK: 使用NSUserDefaults
- iOS NSUserDefaults的使用
- ios NSUserDefaults使用注意事项
- iOS-NSUserDefaults简单使用
- iOS NSUserDefaults的使用
- iOS NSUserDefaults 之最简单存取数据 小Demo
- ios开发 NSUserDefaults的使用
- ios中NSUserDefaults的使用
- IOS-------------NSUserDefaults standardUserDefaults的使用
- ios中NSUserDefaults的使用
- IOS-- NSUSERDEFAULTS简介及使用
- Markdown新手教程
- 遮 罩 层 的 实 现
- 2016.07.12 完成 9 道题
- PHP 开发者应了解的24个库
- 计算机网络绪论
- iOS 使用NSUserDefaults存取头像
- 腾讯云账号的root登陆不进去
- android studio编译项目时出错
- Log4J和slf4j的debug日志问题
- Java JDK Integer Cache
- 《C++编程风格》第一章:抽象
- Vertica的这些事<三>—— 谈谈vertica的flex table
- 模板类与非模板类中将重载操作符函数作为友元函数的区别
- java之封装 Encapsulation