2013-10-19 29 views
0

我的问题是:如何在iOS中的具体日期和时间加载一个特定的形象?加载特定的日期和时间的图像中的iOS

我已经搜查了网,但没有发现任何有用的东西。

我有图像在imageArray列表,并希望在一个特定的日期,时间和顺序来显示每个图像。

Fx的。说我想在MyDateAndTime上加载MyImage。我怎样才能做到这一点?

图像1 - DateAndTime 1个 图像2 - DateAndTime 2 图片3 - DateAndTime 3

任何建议所理解的,请如果可能提供一些源代码。

+4

透露更多的细节。你想要做什么? – cojoj

+0

我只想制作一个演示应用程序,演示如何在不同的日期和时间加载不同的图像。 – me72921

+0

所以你有一个图像或...的数据库?我想你可以创建一些哈希函数日期和随机选择图像 – cojoj

回答

1

我把简单的逻辑,编辑按照您的要求,否则,如果您有关于我的回答有任何疑问,那么请告诉我。

最好的办法是存储图像与日期时间dd_MM_yyyy_HH_mm_ss的名称和访问图像的名称,例如像,

NSString *imageName 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"dd_MM_yyyy_HH_mm_ss"]; 
imageName = [NSString stringWithFormat:@"%@.png", [formatter stringFromDate:[NSDate date]]]; // here you can set specific dateTime, i putted current dateTime 

在这里,你得到imageName诸如此类19_10_2013_6_13_21.png

而且通过这个图像名称可以从包或文档目录中获取图像。

+1

非常感谢你,我确信这将工作! – me72921

+1

但是你知道,这需要3600个图像来处理一个小时范围内的日期? – CouchDeveloper

+1

将日期组件作为数组的索引检索会更好。 –

0

如果我现在明白你的问题,使用递归块你可以检查出一个奇特的办法是这样的:

#import <Foundation/Foundation.h> 
#import <dispatch/dispatch.h> 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 
     NSArray* dates = @[@1, @1, @1, @1, @1, @1, @1, @1, @1]; 
     NSArray* urls = @[@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I"]; 

     NSEnumerator* dateIter = [dates objectEnumerator]; 
     NSEnumerator* urlIter = [urls objectEnumerator]; 

     typedef void(^block_t)(NSEnumerator* dateIter, NSEnumerator* urlIter); 

     block_t asyncFunc; 
     __block __weak block_t _asyncFunc = asyncFunc = ^(NSEnumerator* dateIter, NSEnumerator* urlIter) { 
      NSNumber* date = [dateIter nextObject]; 
      NSString* url = [urlIter nextObject]; 
      if (date != nil && url != nil) { 
       double delayInSeconds = [date doubleValue]; 
       dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
       dispatch_after(popTime, dispatch_get_global_queue(0, 0), ^(void){ 
        NSLog(@"%@", url); 
        _asyncFunc(dateIter, urlIter); 
       }); 
      } 
      else { 
       printf("\n"); 
       return; 
      } 
     }; 

     // start: 
     asyncFunc(dateIter, urlIter); 

     sleep (10); 
    } 
    return 0; 
} 

注:

的“日期”实际上是“延迟“并且这个例子中的URL实际上只是字符串。你应该可以随意调整它。当然,NSLog(@"%@", url);实际上会显示你的图像。

此外,块asyncFunc是异步的!

1

如果您只想每分钟显示一张不同的图像,请使用此选项,否则请在下面跳过以查看有用的日期信息。

NSTimeInterval secondsInMinute = 60; 
[NSTimer timerWithTimeInterval:secondsInMinute target:self selector:@selector(minuteChanged:) userInfo:nil repeats:YES]; 

- (void)minuteChanged:(id)sender { 
    // change image here 
} 

你的问题可能有很多不同的答案,你想动态创建这个日期吗?或者它是一个预定义的日期?一个解决方案是获得你正在寻找的日期的timeInterval。

NSDate* rightNow = [NSDate date]; 
NSTimeInterval timeInterval = [rightNow timeIntervalSince1970]; 

// since time intervals are in seconds we can just append the 
// date as easily as adding time 

NSInteger secondsInMinute = 60; 
NSInteger minutesInHour = 60; 
NSInteger hoursInDay = 24; 
NSInteger daysInWeek = 7; 

NSInteger secondsInWeek = secondsInMinute * minutesInHour * hoursInDay * daysInWeek; 

timeInterval = timeInterval + secondsInWeek; 
NSDate* aWeekInFuture = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

,我想说的是最简单的下架设置一个日期,但你也可以使用组件来动态地设置一个将来的日期。这会导致一些问题,但这是如何完成的。

NSDate* rightNow = [NSDate date]; 
NSCalendar* calendar = [NSCalendar currentCalendar]; 
NSDateComponents* dateCompenents = [calendar components:(NSDayCalendarUnit | NSWeekCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:rightNow]; 

[dateCompenents setDay:dateCompenents.day + 7]; 

NSDate* aWeekInFuture = [calendar dateFromComponents:dateCompenents]; 

帮助解释这一点,这里是一些控制台日志

(lldb) po rightNow 
$0 = 0x0b933440 2013-10-19 12:43:55 +0000 
(lldb) po aWeekInFuture 
$1 = 0x0ba32a60 2013-10-26 04:00:00 +0000 

你看到的日期是如何准确的一天,年,月,但看在准确的时间,当前时间(现在)是12:43:55但他未来的一周是4:00:00,这是因为我没有要求NSMinutesCalendarUnit,NSHoursCalendarUnit,NSSecondsCalendarUnit ...所以如果我想要一个完美的日期,除非不足我要求每一件事,但你可能并不需要如此准确,实际上你甚至可能想要设定自己的时间。

现在,如果你想有一个静态日期,用户输入一个日期,则需要使用下面

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setCalendar:currentCalendar]; 
[dateFormatter setDateFormat:@"mm/dd/yyyy"]; 

NSDate* birthdayDate = [dateFormatter dateFromString:@"10/05/2013"]; 

NSDateFormatter例如现在你想知道你怎么知道,如果今天是在指定的日期保存。因为它测试完美,但它可以说你存储的日期在NSUserDefaults或服务器或某些地方的,比较的日期的最简单的方法是用一个NSDate

NSDate* rightNow = [NSDate date]; 
NSDate* storedDate = [[NSUserDefaults standardUserDefaults] [email protected]"storedDate"] // some date from server, or UserDefaults 

NSComparisonResult = [rightNow compare:storedDate]; 

这个比较功能是有点不足将返回NSOrderedSame(如果它们相等)的值,NSOrderedDescending(如果storedDate在rightNow后面),并且NSOrderedAscending(如果storedDate在rightNow前面)。这是所有特定的时间间隔。如果你只是想一个普通的日子,你将不得不通过

NSDate* rightNow = [NSDate date]; 
NSDate* birthdayDate = [[NSUserDefaults standardUserDefaults] [email protected]"birthday"] 

NSDateComponents* todayComponents = [currentCalendar components:(NSDayCalendarUnit | NSMonthCalendarUnit) fromDate:rightNow]; 
NSDateComponents* birthdayComponents = [currentCalendar components:(NSDayCalendarUnit | NSMonthCalendarUnit) fromDate:birthdayDate]; 

BOOL dayIsTheSame = (todayComponents.day == birthdayComponents.day); 
BOOL monthIsTheSame = (todayComponents.month == birthdayComponents.month); 

BOOL todayIsBirthday = (dayIsTheSame && monthIsTheSame); 

if (todayIsBirthday) { 
    [self.imgViewBirthday setImage[UIImage imageNamed:@"cake.png"]]; 
} 

在你的问题,你指定的图像阵列组件进行测试,可以说你有根据不同的图像上时它,或分,在请求NSMinutesCalendarUnit作为此数组的索引之后,您将使用组件todayComponent.minute;

UIImage* currentImageToDisplay = [self.arrayOfImage objectAtIndex:todayComponent.minute]; 
self.imageView.image = currentImageToDisplay; 

参考文献: NSDateNSDateFormatterNSDateComponentsNSCalendarNSTimer

+0

也非常有用的答案 - 日期是预定义的 – me72921

+0

日期总是一个在我使用的任何语言的屁股疼痛:/,所以这对我来说是一件好事,我主要使用堆栈溢出学习的目的,我寻找的问题,我想我可以找到答案,看看提出答案,然后揭示我的发现,所以这对于学习的目的来说是个好问题:p –

相关问题