美文网首页
iOS Tips 小贴

iOS Tips 小贴

作者: 一铭_ | 来源:发表于2015-12-14 21:31 被阅读58次

1.NSDate 取年月日等等
最近项目中要取到当前时间的年月日等等数据,搜遍终得一个方法如下:

- (void)setDateArray
{
    NSDate *dateNow;
    for (int i = 0; i<7; i++) {
        dateNow = [NSDate dateWithTimeIntervalSinceNow:i*24*60*60];
        NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
        NSDateComponents *comps = [[NSDateComponents alloc]init];
        NSInteger unitFlags = NSYearCalendarUnit|NSDayCalendarUnit|NSWeekdayCalendarUnit|NSHourCalendarUnit |NSMonthCalendarUnit;
        comps = [calendar components:unitFlags fromDate:dateNow];
        long day = [comps day];
        NSUInteger month = [comps month];
        NSString *dateStr = [NSString stringWithFormat:@"%ld月%ld日",month,day];
        [_dateArray addObject:dateStr];
    }
}

输出_dataArray 可得

**12****月****14****日**
**12****月****15****日**
**12****月****16****日**
**12****月****17****日**
**12****月****18****日**
**12****月****19****日**
**12****月****20****日**
  1. xcode 7 tableView的一些小问题

tableView 在xcode7 下会有一些分割线无法被隐藏
解决办法:

-(void)layoutSubviews{
      [super layoutSubviews]; 
       self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
  1. reloadData 刷新失效
[tableView reloadData]

无效,有一行 cell 明明改变了但是刷新不出来。
解决的方法是,注释 [tableView reloadData] ,改用局部刷新:

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];

4.测试 bug 的工具
bugtags 用了不后悔

/**
 *  判断一个时间段有几天几个小时几分钟等等
 *
 *  @param startDate 开始日期
 *  @param endDate   结束时间
 *
 *  @return 返回两个时间段中间差几个小时
 */
+ (NSString *)getStartTime:(NSString *)startDate endTime:(NSString *)endDate
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"HH:mm"];
    
    NSDate *date1 = [dateFormatter dateFromString:startDate];
    NSDate *date2 = [dateFormatter dateFromString:endDate];
    
    NSTimeInterval time = [date2 timeIntervalSinceDate:date1];
    float hours = (float)time/3600;
    return [NSString stringWithFormat:@"%.2f",hours];
}

/**
 *  判断一个时间段内有几个星期几 (比如判断1月29号到2月12号有几个星期五)
 *
 *  @param startDate 开始时间
 *  @param endDate   结束时间
 *  @param weekStr   判断的星期几
 *
 *  @return  nsstring 是个数
 */
- (NSString *)featureWeekdayWithDate:(NSString *)startDate endStart:(NSString *)endDate weekStr:(NSString *)weekStr
{
    NSInteger dayIndex = 0;
    if ([weekStr isEqualToString:@"星期天"]) {
        dayIndex = 7;
    }
    if ([weekStr isEqualToString:@"星期一"]) {
        dayIndex = 1;
    }
    if ([weekStr isEqualToString:@"星期二"]) {
        dayIndex = 2;
    }
    if ([weekStr isEqualToString:@"星期三"]) {
        dayIndex = 3;
    }
    if ([weekStr isEqualToString:@"星期四"]) {
        dayIndex = 4;
    }
    if ([weekStr isEqualToString:@"星期五"]) {
        dayIndex = 5;
    }
    if ([weekStr isEqualToString:@"星期六"]) {
        dayIndex = 6;
    }
    
    long days = [[MyUtil getStartTime:startDate endTime:endDate] integerValue];
    days++;
    // 将总天数 换算为 以 周 计算(假如 相差10天,其实就是等于 相差 1周零3天,只需要取3天,更加方便计算)
    NSInteger fullIndex = days>=7 ? days/7 : 0;
    long day = days >= 7 ? days % 7 : days;
    NSInteger flag = 0;
    for (int i = 0; i< day; i++) {
        NSDate *date = [NSDate dateWithString:startDate format:@"yyyy-MM-dd"];
        long week = ([date weekday]+i)%7;
        switch (week) {
            case 1:
                if (dayIndex == 7) {
                    flag++;
                }
                break;
            case 2:
                if (dayIndex == 1) {
                    flag++;
                }
                break;
            case 3:
                if (dayIndex == 2) {
                    flag++;
                }
                break;
            case 4:
                if (dayIndex == 3) {
                    flag++;
                }
                break;
            case 5:
                if (dayIndex == 4) {
                    flag++;
                }
                break;
            case 6:
                if (dayIndex == 5) {
                    flag++;
                }
                break;
            case 7:
                if (dayIndex == 6) {
                    flag++;
                }
                break;
            default:
                break;
        }
    }
    return [NSString stringWithFormat:@"%d",fullIndex+flag];
}

设置一个 UIView 的背景图片:推荐使用

 NSString *path = [[NSBundlemainBundle]pathForResource:@"image"ofType:@"jpg"];      
 UIImage *image = [UIImageimageWithContentsOfFile:path];
 self.view.layer.contents = (id)image.CGImage;

图片缓存
根据是否将创建好的对象缓存入系统内存,有两类创建UIImage对象的方法可选:

缓存:+ imageNamed:,只需传入文件名.扩展名(可选)即可。
不缓存:+ imageWithContentsOfFile:,必须传入文件的全名(全路径+文件名)。

Assets.xcassets中的图片资源只能通过imageNamed:方法加载,通过NSBundle的pathForResource:ofType:无法获得图片路径。因此,Assets.xcassets只适合存放系统常用的,占用内存小的图片资源。
imageNamed:方法同样可以加载根目录中的图片资源。
要想利用imageWithContentsOfFile:方法以不缓存的形式加载图片,必须将图片资源放置在根目录中。

相关文章

  • iOS Tips 小贴

    1.NSDate 取年月日等等最近项目中要取到当前时间的年月日等等数据,搜遍终得一个方法如下: 输出_dataAr...

  • iOS 11 适配以及Xcode 9小Tips

    iOS 11 适配以及Xcode 9小Tips iOS 11 适配以及Xcode 9小Tips

  • iOS图片推送的一些开发小Tips

    iOS图片推送的一些开发小Tips iOS图片推送的一些开发小Tips

  • iOS资源

    iOS开发200个tips总结(一) iOS开发200个tips总结(二) iOS中NSFileManager文件...

  • iOS小Tips

    仅为我自己记录用的,一些乱七八糟的东西,有需要欢迎使用,觉得小白的大神请路过。。。 宏定义判断null字符 coc...

  • iOS 小tips

    1.主线程执行代码 dispatch_async(dispatch_get_main_queue(), ^{ ...

  • iOS开发小Tips

    1.AFNetworking返回结果默认回到主线程中,所以在AFNetworking的返回结果block中无需手动...

  • 实用的37条面试IT公司的小贴士

    今天面试365网小编给大家37条面试IT公司的贴士。本文来源于国外 37 Tips For Interviewin...

  • 推送相关

    推送:https://www.jianshu.com/p/0ab721604877 iOS图片推送的一些开发小Tips

  • iOS 开发 Button文字对齐

    iOS开发button常用设置 tips:无用设置

网友评论

      本文标题:iOS Tips 小贴

      本文链接:https://www.haomeiwen.com/subject/gpsuhttx.html