我想要在白天显示为太阳的图像,即从早上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];
}
答案 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"];
}