iOS Tips 小贴

2015-12-14  本文已影响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:方法以不缓存的形式加载图片,必须将图片资源放置在根目录中。

上一篇 下一篇

猜你喜欢

热点阅读