2013-10-19 24 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 –

相關問題