0

アプリを開くと最新の結果が表示され、uiview を左にスワイプすると前の結果が表示され、右にスワイプして最新の結果が表示される問題に直面しています。

これは左スワイプのコードです

-(void)swipeLeft
{


    NSLog(@"Mag Date:%@",magCurDate);
    NSDate *tempDate;

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    tempDate = [formatter dateFromString:magCurDate];

    NSLog(@"temp Date:%@",tempDate);

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setDay:-1];
    [dateComponents setHour:8];
    NSDate *targetDate = [gregorian dateByAddingComponents:dateComponents toDate:tempDate  options:0];

    NSLog(@"target Date:%@",targetDate);

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"ddMMYYYY"];
    NSString *sDate = [df stringFromDate:targetDate];

    NSLog(@"sDate Date:%@",sDate);

    [self LoadMagnumResult:sDate];

}

これは私のスワイプ右コードですが、最新の結果で停止できませんでした。最後のスワイプを最新の結果にしたいです。

-(void)swipeRight
{


    NSLog(@"Mag Date:%@",magCurDate);
    NSDate *tempDate;

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    tempDate = [formatter dateFromString:magCurDate];

    NSLog(@"temp Date:%@",tempDate);

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setDay:+1];
    [dateComponents setHour:8];
    NSDate *targetDate = [gregorian dateByAddingComponents:dateComponents toDate:tempDate  options:0];

    NSLog(@"target Date:%@",targetDate);

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"ddMMYYYY"];
    NSString *sDate = [df stringFromDate:targetDate];

    NSLog(@"sDate Date:%@",sDate);

    [self LoadMagnumResult:sDate];

}
4

1 に答える 1

0

私は、最新の結果が将来であるはずがないと仮定しています。つまり、「最新の結果」の最大日付は今日です。また、左にスワイプすると、今日になるまで情報がインクリメントされると想定しています。左スワイプで今日にジャンプしたい場合、コードはさらに簡単です。それがあなたの意図したものかどうか教えてください。私はあなたのアプリケーションを持っていないので、testDate という日付を格納する内部変数を作成しました。また、画面にラベルを付けて、outputLabel と名付けました。必要に応じてコードを変更できます。

最後に、右スワイプで時間を戻し、左スワイプで時間を進めるようにメソッドを変更しました。ユーザーは、右スワイプを逆方向 (Web ブラウザーに戻るなど) と考えることに既に慣れています。右スワイプは左から始まり、右で終わることを忘れないでください。

まず、日付を文字列に変換するヘルパー メソッドを作成します。

- (NSString*)stringFromDate:(NSDate*)date
{
    //Helper method to return a string from a date
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yy"];
    return [formatter stringFromDate:date];
}

これが私の右スワイプ方法です。時間間隔を使用して日付をインクリメントする方法に注目してください。これにより、メソッドから数行のコードを節約できます。私が間違っていない限り、スワイプごとに日付を 24 時間ずつ進めようとしているようです。また、これら 2 つのメソッドの前に定数を作成したので、スワイプごとに増分する日数を変更する場合にコードを検索する必要はありません。

#define kDaysPerSwipe 1

- (void)swipeRight:(UISwipeGestureRecognizer*)swipeRight
{
    NSLog(@"right swipe received");

    //Number of days to add
    int numberOfDaysToAdd = kDaysPerSwipe;

    //Generate a new date
    NSDate *newDate = [self.testDate dateByAddingTimeInterval:-(60*60*24*numberOfDaysToAdd)];

    //Store the new date
    self.testDate = newDate;

    //Output the new date
    self.outputLabel.text = [self stringFromDate:self.testDate];
}

これが私の左スワイプ方法です。newDate を今日と比較し、先に進む前に 2 つのうちの EARLIER の日付のみを保存する方法に注意してください。

- (void)swipeLeft:(UISwipeGestureRecognizer*)swipeLeft
{
    NSLog(@"left swipe received");

    //Number of days to add
    int numberOfDaysToAdd = kDaysPerSwipe;

    //Generate a new date
    NSDate *newDate = [self.testDate dateByAddingTimeInterval:(60*60*24*numberOfDaysToAdd)];

    NSLog(@"newDate: %@", [self stringFromDate:newDate]);

    //Compare newDate to today.  Return whichever is earlier.
    newDate = [[NSDate date] earlierDate:newDate];

    self.testDate = newDate;

    //Show the output on the screen
    self.outputLabel.text = [self stringFromDate:self.testDate];
}
于 2012-09-25T23:47:47.860 に答える