2016年01月04日公司项目开发记录

2016年01月04日18:55:39 周一


今天我这边主要完成了”我” 的页面的基本布局和简单功能的实现.

涉及到的代码需要注意的部分

设置颜色的宏定义
// 获取 RGB 颜色
#define RGBA(r,g,b,a) [UIColor colorWithRed:r/ 255.0f green:g/ 255.0f blue:b/ 255.0f alpha:a]
#define RGB(r,g,b) RGBA(r,g,b,
1.0f )
#define SKUIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue &0xFF0000) >>16))/255.0green:((float)((rgbValue &0xFF00) >>8))/255.0blue:((float)(rgbValue &0xFF))/255.0alpha:1.0]


设置提示框的方式
第一种:
        // 通过弹窗提示用户切换头像
       
UIAlertController *alert = [ UIAlertController alertControllerWithTitle : @" 是否切换头像 " message : nil preferredStyle :( UIAlertControllerStyleActionSheet )];
   
       
UIAlertAction *camera = [ UIAlertAction actionWithTitle : @" 拍照 " style :( UIAlertActionStyleDefault ) handler :^( UIAlertAction * _Nonnull action) {
           
NSLog ( @" 调用系统相机 " );
   
           
// 调用系统相机
           
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera ;
           
if ([ UIImagePickerController isSourceTypeAvailable : UIImagePickerControllerSourceTypeCamera ]) {
               
UIImagePickerController *picker = [[ UIImagePickerController alloc ] init ];
                picker.
delegate = self ;
                picker.
allowsEditing = YES ;
                picker.
sourceType = sourceType;
                [
self presentViewController :picker animated : YES completion : nil ];
            }
           
else {
               
NSLog ( @" 模拟器无法打开相机 " );
            }
        }];
       
UIAlertAction *photo  = [ UIAlertAction actionWithTitle : @" 从相册中选择 " style :( UIAlertActionStyleDefault ) handler :^( UIAlertAction * _Nonnull action) {
           
NSLog ( @" 从相册中选择 " );
   
           
// 调用系统相册
           
UIImagePickerController *picker = [[ UIImagePickerController alloc ] init ];
            picker.
sourceType = UIImagePickerControllerSourceTypePhotoLibrary ;
            picker.
delegate = self ;
            picker.
allowsEditing = YES ;
            [
self presentViewController :picker animated : YES completion : nil ];
        }];
       
UIAlertAction *cancle = [ UIAlertAction actionWithTitle : @" 取消 " style :( UIAlertActionStyleCancel ) handler : nil ];
        [alert
addAction :camera];
        [alert
addAction :photo];
        [alert
addAction :cancle];
        [selfpresentViewController:alertanimated:YEScompletion:^{}];
第二种:
先设置属性
    UIActionSheet *myActionSheet;   // 下拉菜单
实现方法
    // 在这里呼出下方菜单按钮项
   
myActionSheet = [[ UIActionSheet alloc ] initWithTitle : @" 是否切换头像 "
                                              
delegate : self
                                     
cancelButtonTitle : @" 取消 "
                                
destructiveButtonTitle : nil
                                     
otherButtonTitles : @" 拍照 " , @" 从相册选择 " , nil ];
   
    [myActionSheetshowInView:self.view];
注意代理 UIActionSheetDelegate
最后实现代理方法
- ( void )actionSheet:( UIActionSheet *)actionSheet clickedButtonAtIndex:( NSInteger )buttonIndex
{
   
   
// 呼出的菜单按钮点击后的响应
   
if (buttonIndex == myActionSheet . cancelButtonIndex )
    {
       
NSLog ( @" 取消 " );
    }
   
switch (buttonIndex)
    {
       
case 0 // 打开照相机拍照
            [
self takePhoto ];
           
break ;
           
       
case 1 // 打开本地相册
            [
self LocalPhoto ];
           
break ;
    }
}

调用系统相机

实现方法
//调用系统相机
-( void )takePhoto

{
   
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera ;
   
if ([ UIImagePickerController isSourceTypeAvailable : UIImagePickerControllerSourceTypeCamera ])
    {
       
UIImagePickerController *pickerCammer = [[ UIImagePickerController alloc ] init ];
       
if ([ UIImagePickerController isSourceTypeAvailable : UIImagePickerControllerSourceTypeCamera ])
        {
            pickerCammer.
sourceType = UIImagePickerControllerSourceTypeCamera ;
            pickerCammer.
mediaTypes = [ UIImagePickerController availableMediaTypesForSourceType :pickerCammer. sourceType ];
            pickerCammer.
delegate = self ;
            pickerCammer.
allowsEditing = YES ;
           
        }
        [
self presentViewController :pickerCammer animated : YES completion : nil ];
       
    }
else
    {
       
NSLog ( @" 模拟其中无法打开照相机 , 请在真机中使用 " );
    }
}
// 打开本地相册
-(
void )LocalPhoto
{
   
UIImagePickerController *picker = [[ UIImagePickerController alloc ] init ];
   
    picker.
sourceType = UIImagePickerControllerSourceTypePhotoLibrary ;
    picker.
delegate = self ;
   
// 设置选择后的图片可被编辑
    picker.
allowsEditing = YES ;
    [
self presentViewController :picker animated : YES completion : nil ];
}
实现代理 UIImagePickerControllerDelegate
实现代理方法
#pragma mark - 切换用户头像代理
// 当选择一张图片后进入这里
-(
void )imagePickerController:( UIImagePickerController *)picker didFinishPickingMediaWithInfo:( NSDictionary *)info

{
   
NSString *type = [info objectForKey : UIImagePickerControllerMediaType ];
   
   
// 当选择的类型是图片
   
if ([type isEqualToString : @"public.image" ])
    {
       
// 先把图片转成 NSData
       
image = [info objectForKey : @"UIImagePickerControllerOriginalImage" ];
       
NSData *data;
       
if ( UIImagePNGRepresentation ( image ) == nil )
        {
            data =
UIImageJPEGRepresentation ( image , 1.0 );
        }
       
else
        {
            data =
UIImagePNGRepresentation ( image );
        }
       
       
// 图片保存的路径
       
// 这里将图片放在沙盒的 documents 文件夹中
       
NSString * DocumentsPath = [ NSHomeDirectory () stringByAppendingPathComponent : @"Documents" ];
       
       
// 文件管理器
       
NSFileManager *fileManager = [ NSFileManager defaultManager ];
       
       
// 把刚刚图片转换的 data 对象拷贝至沙盒中 并保存为 image.png
        [fileManager
createDirectoryAtPath :DocumentsPath withIntermediateDirectories : YES attributes : nil error : nil ];
        [fileManager
createFileAtPath :[DocumentsPath stringByAppendingString : @"/image.png" ] contents :data attributes : nil ];
       
       
// 得到选择后沙盒中图片的完整路径
       
filePath = [[ NSString alloc ] initWithFormat : @"%@%@" ,DocumentsPath,  @"/image.png" ];
       
NSLog ( @" 图片的路径是: %@" , filePath );
       
// 关闭相册界面
        [picker
dismissViewControllerAnimated : YES completion : nil ];
       
       
NSUserDefaults *userDefault = [ NSUserDefaults standardUserDefaults ];
        [userDefault
setObject : filePath forKey : @"userImage" ];
        [userDefault
synchronize ];
       
       
// 将之前的按钮移除视图
        [
userImage_image removeFromSuperview ];
       
        [
self chooseUserImageAndTap ];
    }
}
- (
void )imagePickerControllerDidCancel:( UIImagePickerController *)picker{
   
NSLog ( @" 您取消了选择图片 " );
    [picker
dismissViewControllerAnimated : YES completion : nil ];
}

本地化存储 NSUserDefault

获取到图片的本地路径后进行保存
        NSUserDefaults *userDefault = [ NSUserDefaults standardUserDefaults ];
        [userDefault
setObject : filePath forKey : @"userImage" ];
        [userDefaultsynchronize];
第二次登录的时候重新赋值
    // 从本地取之前保存的图片
   
NSUserDefaults *userDefault = [ NSUserDefaults standardUserDefaults ];
   
NSString *fileToUserImage = [userDefault stringForKey : @"userImage" ];
   image= [UIImageimageWithContentsOfFile:fileToUserImage];
需要注意
存储只能存储基本类型
NSUserDefaults支持的数据格式有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL类型
而且存储时,除NSNumber类型使用对应的类型意外,其他的都是使用setObject:forKey: 
最后同步到硬盘  这步不是必须的,但是推荐加上 [userDefaultsynchronize];

使用 SVN 冲突的时候(SVN:155015)

1.自己手动查询(推荐)


2.可以使用这个按钮,但是很多时候会出错,毕竟自动合并

3.使用命令行解决(未验证实际效果)
或者
SVN resolve <你的文件夹名称>


更多精彩文章,尽在我的公众号.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值