ios如何在特定时间更改图像

时间:2012-08-17 08:40:31

标签: objective-c xcode4

我想要在白天显示为太阳的图像,即从早上6点到下午6点,月亮从下午6点到早上6点。

我已经成功实现了,但问题是图像在达到指定时间后不会改变,除非在图像更改之前重新运行应用程序。

我不想使用NSTimer来检查时间,就像每一秒一样。我想到的唯一可能的解决方案是使用NSLocalNotification,但我是新手。任何帮助? =)

-(void) dayOrNight
{

NSDate* date                = [NSDate date];

NSDateFormatter* dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"HHmm"];
NSString* dateString        = [dateFormat stringFromDate:date];
NSNumber* currentTime       = [NSNumber numberWithInt:[dateString intValue]];
NSNumber* daytime           = [NSNumber numberWithInt:600];
NSNumber* nightime          = [NSNumber numberWithInt:1800];
NSLog(@"current time: %@",dateString);

dayNight = [[UIImageView alloc] initWithFrame:CGRectMake(265, 10, 50, 50)];


    if ( [currentTime doubleValue] >= [daytime doubleValue] && [currentTime doubleValue] <= [nightime doubleValue] ) 
    {
    dayNight.image = [UIImage imageNamed:@"Sun.png"];
    }

    else 
    {
    dayNight.image = [UIImage imageNamed:@"moon.png"];
    }


[self.view addSubview:dayNight];
}

3 个答案:

答案 0 :(得分:0)

我认为没有NSTimer是不可能的。你可以自己设置refreshTime(例如1分钟/如果你不想每秒都这样做))) 或者你可以用其他方法调用这个方法,这些方法每次都在你的班级工作......

也许你有一些在课堂上使用的对象......

-(IBAction)myButtonWhichIPressDuringIworkHere {
///some actions
[self dayOrNight];
}

在其他情况下,您应该使用NSTimer

答案 1 :(得分:0)

我猜,本地通知应该没问题。 Here您可以获得所有必需的代码段,以便在需要的时间实现dayOrNight方法的执行。此外,每次更改图片时都不应添加新视图。

答案 2 :(得分:0)

你不需要每秒检查一次。

这是可能的解决方案之一。它仅在在真实设备上测试


您的 UIYourViewController.m

- (void)viewWillAppear:(BOOL)animated {
    NSDate *_currentDate = [NSDate date];
    NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
    [_dateFormatter setDateFormat:@"yyyy-MM-dd' 06:00AM +0000'"]; // set the morning date here
    NSString *_morningDateString = [_dateFormatter stringFromDate:_currentDate];
    [_dateFormatter setDateFormat:@"yyyy-MM-dd' 06:00PM +0000'"]; // set the evening date here
    NSString *_eveningDateString = [_dateFormatter stringFromDate:_currentDate];

    [_dateFormatter setDateFormat:@"yyyy-MM-dd hh:mma zzz"];
    NSDate *_morningDate = [_dateFormatter dateFromString:_morningDateString];
    NSDate *_eveningDate = [_dateFormatter dateFromString:_eveningDateString];

    NSTimeInterval _intervalToMorningDate = [_morningDate timeIntervalSinceDate:_currentDate];
    NSTimeInterval _intervalToEveningDate = [_eveningDate timeIntervalSinceDate:_currentDate];

    if (_intervalToMorningDate > 0) {
        // now it is night
        dayNight.image = [UIImage imageNamed:@"moon.png"];
        [self performSelector:@selector(replaceTheBackgoundForMorning) withObject:nil afterDelay:_intervalToMorningDate];
    } else {
        // now it is daytime
        dayNight.image = [UIImage imageNamed:@"Sun.png"];
        [self performSelector:@selector(replaceTheBackgoundForEvening) withObject:nil afterDelay:_intervalToEveningDate];
    }

}

- (void)viewDidDisappear:(BOOL)animated {
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

最后你应该将它们添加到你的 .m 文件中:

-(void)replaceTheBackgoundForMorning {
    // reaplce the backgound here
    dayNight.image = [UIImage imageNamed:@"Sun.png"];
}

- (void)replaceTheBackgoundForEvening {
    // reaplce the backgoung here
    dayNight.image = [UIImage imageNamed:@"moon.png"];
}