工作笔记

积少成多,每天进步一点点,2016/5/10

Xcode控制台字体为SF Mono

1--xib约束自适应

xib或者系统的cell局部空间需要自适应时,使用下面代码,将IB中的约束当做属性拖出来,然后利用以下语句动态给其赋值
CGSize sizeFit = [self.primeCostLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]}];

//动态计算测量
        CGSize sizeFit = [cell.nameLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}];
        cell.nameLabelWidth.constant = sizeFit.width;

2--通过点击的控件获取对应的cell的index

例如每个cell上有个button,用以下方法:
//    
//    HGManageOrdersTableViewCell *cell = (HGManageOrdersTableViewCell * )[senderButton superview].superview;
//    NSIndexPath *indexPath = [_myFirstTableView indexPathForCell:cell];
//    NSLog(@"发货按钮对应index%ld",(long)indexPath.section); 

3--给imageView添加手势

imageView用户交互默认是关闭的,需手动打开

    cell.firstAddImageView.userInteractionEnabled = YES;

4--iOS富文本(指定区间的文字变色,变字形等)

 NSMutableAttributedString *nowPrice = [[NSMutableAttributedString alloc]initWithString:@"现价:¥"];
        [nowPrice addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(3, 1)];
        cell.nowPriceLabel.attributedText = nowPrice;

5--判断点击点是否在某一区域内


//矩形区间判断点击点范围

/*

//    //点击点(在tableview中)
//    CGPoint tableViewPoint = [sender locationInView:self.myTableView];
//
//    CGRect rect00 = [oneCell convertRect:oneCell.firstAddImageView.frame toView:self.myTableView];

//    if (CGRectContainsPoint(rect00, tableViewPoint)) {
//        NSLog(@"第一行,第一个");
//        [self addPicture:oneCell withIndex:0];
//        return;
//    }

 */

6--等待某一事件执行完成之后再执行其他


有时候系统的方法在for循环里,即使用线程也没有办法保证优先走完整个循环再执行后边的,以下办法亲测有效

ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    
    for (NSURL  *url in self.finalImagesArray) {
        
        dispatch_async(queue, ^{
        
            [assetLibrary assetForURL:url resultBlock:^(ALAsset *asset)  {
            
               UIImage * image = [UIImage imageWithCGImage:asset.aspectRatioThumbnail];

                NSData *data = [HGRequestManager reSizeImageData:image maxImageSize:800  maxSizeWithKB:1024.0];
                
                NSString *string = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

          
                
                [imageArray addObject:string];
                NSLog(@"转码中...");
                
                dispatch_semaphore_signal(sema);
            }failureBlock:^(NSError *error) {
               dispatch_semaphore_signal(sema);
                NSLog(@"error=%@",error);
            }];
            
            
        });
        
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

    }


7--下拉刷新与上拉加载

// 1.下拉刷新  
   _tableView.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{  
       // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)  
       dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{  
           // 结束刷新  
           [_tableView.mj_header endRefreshing];  
       });  
   }];  
     
   // 设置自动切换透明度(在导航栏下面自动隐藏)  
   _tableView.mj_header.automaticallyChangeAlpha = YES;  
     
   // 2.上拉加载  
   _tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{  
       // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)  
       dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{  
           // 结束刷新  
           [_tableView.mj_footer endRefreshing];  
       });  
   }];  

8--二维码扫描识别区域问题

    //设置rectOfInterest///CGRectMake(y的起点/屏幕的高,x的起点/屏幕的宽,扫描的区域的高/屏幕的高,扫描的区域的宽/屏幕的宽)
//    //扫描框
    _boxView = [[UIView alloc]init];
    _boxView.frame = CGRectMake(0, 0,SCREEN_WIDTH * 0.6, 120);
    _boxView.center = self.view.center;
//    _boxView = [[UIView alloc]initWithFrame:CGRectMake(0,0,100,100)];
    _boxView.layer.borderColor = [UIColor redColor].CGColor;
    _boxView.layer.borderWidth = 0.5f;
    [_scanView addSubview:_boxView];


    outPut.rectOfInterest = CGRectMake(_boxView.frame.origin.y/SCREEN_HEIGHT, _boxView.frame.origin.x/SCREEN_WIDTH, _boxView.frame.size.height/SCREEN_HEIGHT,  _boxView.frame.size.width/SCREEN_WIDTH);

9--使用贝塞尔曲线实现button圆角

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(120, 10, 80, 80)];
view2.backgroundColor = [UIColor redColor];
[self.view addSubview:view2];

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view2.bounds      byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight    cornerRadii:CGSizeMake(10, 10)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view2.bounds;
maskLayer.path = maskPath.CGPath;
view2.layer.mask = maskLayer;

10--设置日期时的dateFormatter代号

纪元的显示:
G:显示AD,也就是公元 
年的显示:
yy:年的后面2位数字
yyyy:显示完整的年 
月的显示:
M:显示成1~12,1位数或2位数
MM:显示成01~12,不足2位数会补0
MMM:英文月份的缩写,例如:Jan
MMMM:英文月份完整显示,例如:January

日的显示:
d:显示成1~31,1位数或2位数
dd:显示成01~31,不足2位数会补0 
星期的显示:
EEE:星期的英文缩写,如Sun
EEEE:星期的英文完整显示,如,Sunday
 
上/下午的显示:
aa:显示AM或PM

小時的显示:
H:显示成0~23,1位数或2位数(24小时制
HH:显示成00~23,不足2位数会补0(24小时制)
K:显示成0~12,1位数或2位数(12小時制)
KK:显示成0~12,不足2位数会补0(12小时制)

分的显示:
m:显示0~59,1位数或2位数
mm:显示00~59,不足2位数会补0

秒的显示:
s:显示0~59,1位数或2位数
ss:显示00~59,不足2位数会补0
S: 毫秒的显示

时区的显示:
z / zz /zzz :PDT
zzzz:Pacific Daylight Time
Z / ZZ / ZZZ :-0800
ZZZZ:GMT -08:00
v:PT
vvvv:Pacific Time

11--GCD网站

http://www.samirchen.com/ios-gcd/

12--iOS坐标转换


iOS-- UIView中的坐标转换

// 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
// 将像素point从view中转换到当前视图中,返回在当前视图中的像素值
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;

// 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
// 将rect从view中转换到当前视图中,返回在当前视图中的rect
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;

例把UITableViewCell中的subview(btn)的frame转换到 controllerA中

// controllerA 中有一个UITableView, UITableView里有多行UITableVieCell,cell上放有一个button
// 在controllerA中实现:
CGRect rc = [cell convertRect:cell.btn.frame toView:self.view];
或
CGRect rc = [self.view convertRect:cell.btn.frame fromView:cell];
// 此rc为btn在controllerA中的rect

或当已知btn时:
CGRect rc = [btn.superview convertRect:btn.frame toView:self.view];
或
CGRect rc = [self.view convertRect:btn.frame fromView:btn.superview];

版权:转自http://blog.csdn.net/xuhuan_wh/article/details/8486337

13--为系统类添加属性

新建时选择category


@interface NSString (Ass)  
  给NSString类添加两种类型的属性, 字符串类型的tag值strFlag, 以及int型的tag值intTag. 
定义这个两个属性的set和get方法:
// 对象属性的set和get  
- (void)setStrFlag:(NSString *)strFlag;  
- (NSString *)strFlag;  
  
// 非对象属性的set和get  
- (void)setIntFlag:(int)intFlag;  
- (int)intFlag;  
  
@end 

实现这四个方法:
需导入runtime头文件:
#import <objc/runtime.h> 
@implementation NSString (Ass)  
  
static int _intFlag;  
  
static NSString *_strFlag;  
  
- (void)setStrFlag:(NSString *)flag {  
    // void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)  
    objc_setAssociatedObject(self, &_strFlag, flag, OBJC_ASSOCIATION_RETAIN_NONATOMIC);  
}  
  
- (NSString *)strFlag {  
    // id objc_getAssociatedObject(id object, const void *key)  
    return objc_getAssociatedObject(self, &_strFlag);  
}  
  
- (void)setIntFlag:(int)intFlag {  
    NSNumber *t = @(intFlag);  
    // void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)  
    objc_setAssociatedObject(self, &_intFlag, t, OBJC_ASSOCIATION_RETAIN_NONATOMIC);  
}  
- (int)intFlag {  
    // id objc_getAssociatedObject(id object, const void *key)  
    NSNumber *t = objc_getAssociatedObject(self, &_intFlag);  
    return (int)[t integerValue];  
}  
  
@end  

14--去掉tableViewCell的下方分割线

- (void)addSubview:(UIView *)view{

    if (![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]] && view){
        
        [super addSubview:view];
    }
}

15--Xcode出现The file couldn’t be opened
一般是因为在代码合并时出现冲突,右键showInFinder打开工程蓝色project文件,

project.pbxproj

然后在右键选择色显示包内容,打开project.pbxproj文件 ,command + F查找===
查找冲突,使用===
也就是冲突,手动解决后再提交就可以了
16--首次提交代码到git仓库时报错

一般是由于在git上新建项目的时候加了MIT许可证,导致本地与远程冲突,解决办法,强制提交git push -u origin master -f或者 git pull origin master --allow-unrelated-histories

17--npm start项目启动报错
目前遇到的一次是因为有文件修改了没有提交,用git stash 或者git add后就可以了,其他情况遇到再说
18--布局时tableView向下弹64
如果上下边边界选择的是mas_bottomLayoutGuide以及mas_topLayoutGuide,页面出现后就会向下弹64,解决办法是下边界不要直接去以页面为准,可以参考另一个控件配置,比如在tableView下面放一个提交按钮.
原因暂时不明:

-(UITableView *)orderTableView{
    if (!_orderTableView) {
 
        _orderTableView = [UITableView new];
        [self.view addSubview:_orderTableView];
        _orderTableView.delegate = self;
        _orderTableView.dataSource = self;
        [_orderTableView mas_makeConstraints:^(MASConstraintMaker *make) {
            
            make.top.mas_equalTo(self.mas_topLayoutGuideBottom);
            make.width.mas_equalTo(self.view);
            make.centerX.mas_equalTo(self.view);
            make.bottom.mas_equalTo(self.submitButton.mas_top).with.offset(-10);
        }];
    }
    return _orderTableView;
}

19--SQLITE中exists的用法
一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。

20--sqlite 复制表

【复制表结构及数据】
CREATE TABLE NEW_TABLE(新表) AS SELECT * FROM (OLD_TABLE);
【仅仅复制结构,不复制数据】
CREATE TABLE NEW_TABLE AS SELECT * FROM WHERE 1=2;,跟上面的相比,加了where语句并将条件设为假

21--CKContainer获取iCloud账号返回值不准确
在iOS设备明明有账号登录,返回值却是没有账号登录,原因是设置中iCloud中iCloud Drive没有针对该app打开,导致iCloud不能正常工作

22--直接判断网络是否连接

+ (BOOL)connectedToNetwork
{
    // Create zero addy
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
    
    // Recover reachability flags
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
    
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
    
    if (!didRetrieveFlags)
    {
        printf("Error. Could not recover network reachability flags\n");
        return NO;
    }
    
    BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0);
    BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0);
    return (isReachable && !needsConnection) ? YES : NO;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容