1

私はお金を節約する方法について子供向けのアプリを作ろうとしています。ビジュアルとして、最初は空の瓶(UIIMage)があり、タップすると画像がコインで満たされた瓶に変わり(デポジット/保存をシミュレートするため)、瓶の下のラベルに何かが表示されます-おめでとうございます、別の預金をします。ユーザーが瓶を最大5回タップすると、5回目のタップで瓶がいっぱいになり、瓶の下のラベルに「お金が増えるのを見てください」と表示されるまで、コインが追加されます。

タップ1は今日発生する可能性があり、タップ2は別の時間に発生する可能性があり、タップ3は1週間後に発生する可能性があることに注意してください。

これを説明するために、tapCount(スイッチ付き)にtouchesBeganを使用しています。UIImageViewでの画像のタップと変更はうまく機能します(現在、タップ間の0.5秒間隔でのデモの場合)。

(1)これを正しく行っているかどうか疑問に思っています-アニメーションはうまく機能します-しかし、ユーザーがアプリを離れて再びタップに戻ると、タップ1atにリセットされます。最後のアクションを保存して、子供が終了してアプリに戻ったときに、子供が離れたときと同じ状態に到達するようにすることはできますか?NSUserdefaultを試しましたが、これは機能しないようでした。touchesBegan(スイッチ付き)からデータを保存できるかどうかさえ疑問に思っています。

どんなアイデアでも大歓迎です。ありがとう。

アニメーションのコードは次のとおりです(簡潔にするために3タップに短縮)。

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    NSUInteger tapCount = [touch tapCount];

    switch (tapCount) {
    case 1:
        [self performSelector:@selector(tappedOnce) withObject:nil afterDelay:0.5];
        break;

    case 2:
        [NSObject cancelPreviousPerformRequestsWithTarget:self          selector:@selector(tappedOnce) object:nil];
        [self performSelector:@selector(tappedTwice) withObject:nil afterDelay:0.5];
        break;

    case 3:
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tappedTwice) object:nil];
        [self performSelector:@selector(tappedThreeTimes) withObject:nil afterDelay:0.5];
        break;

    default:
        break;

}

}

 - (void)tappedOnce {

  UIImageView *imageView = [[UIImageView alloc] initWithFrame:
                          CGRectMake(95, 93, 142, 205)];
  imageView.contentMode = UIViewContentModeBottom;
imageView.image = [UIImage imageNamed:@"bucketb.png"];
[self.view addSubview:imageView];
  instructionLabel.text=@"Congratulations, you have deposited money.  Deposit some more.";
 }

 - (void)tappedTwice {

 UIImageView *imageView = [[UIImageView alloc] initWithFrame:
                           CGRectMake(95, 93, 142, 205)];
 imageView.contentMode = UIViewContentModeBottom;
imageView.image = [UIImage imageNamed:@"bucketc.png"];
[self.view addSubview:imageView];
    instructionLabel.text=@"Congratulations, you have added more money to your  account.";
  }

 - (void)tappedThreeTimes {

 UIImageView *imageView = [[UIImageView alloc] initWithFrame:
                         CGRectMake(95, 93, 142, 205)];
imageView.contentMode = UIViewContentModeBottom;
 imageView.image = [UIImage imageNamed:@"bucketd.png"];
[self.view addSubview:imageView];
 instructionLabel.text=@"Watch your money grow.";
}

NSUserdefault(appdelegate):

 - (void)applicationDidEnterBackground:(UIApplication *)application
{


NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setInteger:5 forKey:@"lastTouch"];


[userDefaults synchronize];


 }

 - (void)applicationWillEnterForeground:(UIApplication *)application
 {

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

int temp = [userDefaults integerForKey:@"lastTouch"];

 }
4

1 に答える 1

0

タッチイベントのタップカウントを使用することは、この種の問題のタップをカウントする間違った方法です。

  • おそらく、タップ間の一時停止に関係なく、タップカウントを毎回インクリメントする必要があります

  • アプリの終了/再起動後にタップカウントの状態が失われます

代わりに、シングルタップの検出について心配するだけで、現在のタップ数をクラスプロパティとして保存します。シングルタップするたびにこれを増やします。NSUserDefaultsまた、アプリのバックグラウンド/フォアグラウンディングでこのクラスプロパティを保存および復元するために使用できます。

于 2012-11-22T21:44:36.360 に答える