1

昼間、つまり午前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];
}
4

3 に答える 3

0

NSTimerなしでは不可能だと思います。Uは自分でrefreshTimeを設定できます(たとえば、1分/毎秒実行したくない場合)))または、クラスで毎回機能している他のメソッドでこのメソッドを呼び出すことができます...

多分あなたはあなたのクラスが働いている間にあなたが使ういくつかのオブジェクトを持っています...

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

それ以外の場合は、NSTimerを使用する必要があります

于 2012-08-17T08:59:37.883 に答える
0

ローカル通知は問題ないはずです、私は推測します。 ここでは、必要なときにメソッドの実行を実装するために必要なすべてのコードスニペットを取得できますdayOrNight。また、画像を変更するたびに新しいビューを追加しないでください。

于 2012-08-17T09:03:09.447 に答える
0

毎秒時間をチェックする必要はありません。

これは可能な解決策の1つです。実際のデバイスでのみテストされています。


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"];
}
于 2012-08-17T09:15:33.223 に答える