【问题标题】:Changing background according to time - Objective C根据时间改变背景 - Objective C
【发布时间】:2012-10-11 07:10:33
【问题描述】:

所以我想做的是根据一天中的时间更改图像的背景,但它遇到了问题。代码如下:

-(void)updateBackground
{
    NSDate *currentTime = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:mm a"];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *resultTime = [dateFormatter stringFromDate:currentTime];
    [timeLabel setText:resultTime];
    NSString *morningStart = [NSString stringWithFormat:@"05:00 AM"];
    NSString *morningEnd = [NSString stringWithFormat:@"11:59 AM"];
    NSString *afternoonStart = [NSString stringWithFormat:@"12:00 PM"];
    NSString *afternoonEnd = [NSString stringWithFormat:@"02:59 PM"];
    NSString *eveningStart = [NSString stringWithFormat:@"03:00 PM"];
    NSString *eveningEnd = [NSString stringWithFormat:@"07:59 PM"];
    NSString *nightStart = [NSString stringWithFormat:@"08:00 PM"];
    NSString *nightEnd = [NSString stringWithFormat:@"04:59 AM"];
    NSLog(resultTime);
    if ([resultTime compare:morningStart]==NSOrderedDescending) {
        if ([resultTime compare:morningEnd]==NSOrderedAscending) {
            UIImage *morning = [UIImage imageNamed:@"MorningTime.jpeg"];
            [background setImage:morning];
        }
    }
    if ([resultTime compare:afternoonStart]==NSOrderedDescending) {
        if ([resultTime compare:afternoonEnd]==NSOrderedAscending) {
            UIImage *afternoon = [UIImage imageNamed:@"afternoonSky.jpeg"];
            [background setImage:afternoon];
        }
    }
    if ([resultTime compare:eveningStart]==NSOrderedDescending) {
        if ([resultTime compare:eveningEnd]==NSOrderedAscending) {
            UIImage *evening = [UIImage imageNamed:@"EveningSky.jpeg"];
            [background setImage:evening];
        }
    }
    if ([resultTime compare:nightStart]==NSOrderedDescending) {
        if ([resultTime compare:nightEnd]==NSOrderedAscending) {
            UIImage *night = [UIImage imageNamed:@"NightSky.jpeg"];
            [background setImage:night];
        }
    }


}

那么问题出在哪里,假设现在是晚上 11:54,但它一直说是在上午 5:00 之后和上午 11:59 之前!这不是选择正确的 if 语句!我该怎么办?

【问题讨论】:

  • 您正在比较字符串。你真的应该比较 NSDate 对象。
  • @JohanKarlsson 你能给我一个和我的类似的链接吗?
  • 抱歉,我没有指向此类代码的链接。我已经写了一个答案 ;-) 它不包含完整的源代码,而是关于如何实现您正在寻找的内容的提示。
  • 能否请您选择首选答案?

标签: time background compare nsdate nscalendar


【解决方案1】:

NSDate 格式以 24 小时格式提供时间,因此您必须更改时间(例如(01:00 AM,13:00 PM))以放置您想要的条件。

【讨论】:

    【解决方案2】:

    也许这个对你有帮助,

    NSDate *currentTime = [NSDate date];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"hh:mm a"];
        [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
        NSString *resultTime = [dateFormatter stringFromDate:currentTime];
        NSString *morningStart = [NSString stringWithFormat:@"05:00 AM"];
        NSString *morningEnd = [NSString stringWithFormat:@"11:59 AM"];
        NSString *afternoonStart = [NSString stringWithFormat:@"12:00 PM"];
        NSString *afternoonEnd = [NSString stringWithFormat:@"14:59 PM"];
        NSString *eveningStart = [NSString stringWithFormat:@"15:00 PM"];
        NSString *eveningEnd = [NSString stringWithFormat:@"19:59 PM"];
        if ([morningStart compare:resultTime]==NSOrderedAscending & [resultTime compare:morningEnd]==NSOrderedAscending) {
                NSLog(@"morning");      
        }
       else  if ([afternoonStart compare:resultTime]==NSOrderedAscending & [resultTime compare:afternoonEnd]==NSOrderedAscending) {
                    NSLog(@"aftrnon..."); 
                }
       else  if ([eveningStart compare:resultTime]==NSOrderedAscending & [resultTime compare:eveningEnd]==NSOrderedAscending) {
                    NSLog(@"evening");    
        }
        else {
            NSLog(@"nit time");
        }
    

    【讨论】:

    • 感谢@balu 的努力和反馈,但在我写这篇文章的时候,我现在已经是凌晨 12:55 了。
    • @sunnyChopper:12:55 表示下午,所以我们必须用 PM 代替 AM,然后你就会得到任何你想要的。
    • @sunnyChopper:对不起,12:55 AM,NSDate 格式它给出了 00:55 AM,所以这样你得到了正确的结果。
    • 您应该真正尝试您的代码或知道它正在工作。恕我直言,“可能”不起作用。
    【解决方案3】:

    您应该使用 NSDateComponents 来获取您正在比较的 NSDate 对象的小时和分钟。请参阅 NSDateComponents 的官方文档了解如何使用它。

    然后您使用以下方法之一比较 NSDate 对象:

    - (NSDate *)earlierDate:(NSDate *)anotherDate
    - (NSDate *)laterDate:(NSDate *)anotherDate
    - (BOOL)isEqualToDate:(NSDate *)anotherDate
    

    你不应该在比较日期时使用 NSString。

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多