1

我正在尝试为儿童制作一个关于如何省钱的应用程序。作为一个视觉效果,一开始,我有一个空罐子 (UIIMage),当点击它时,图像会变成一个装满硬币的罐子(模拟存款/储蓄),罐子下面的标签会说一些东西——比如祝贺,进行另一笔存款。当用户点击罐子最多 5 次时,会添加更多硬币,直到在第 5 次点击时罐子被装满,并且罐子下方的标签上写着,看你的钱增长。

请注意,点击 1 可能在今天发生,点击 2 可能在其他时间发生,点击三,一周后,等等。

我使用 touchesBegan 作为 tapCount(带开关)来说明这一点。UIImageView 中图像的点击和更改效果很好(现在以 0.5 秒的间隔进行演示)。

(1) 我想知道我这样做是否正确 - 动画效果很好 - 但是当用户离开应用程序并再次返回点击时,它会重置为点击 1at。是否可以保存最后一个操作,以便当孩子退出并返回应用程序时,他/她到达与他/她离开时相同的状态。我尝试了 NSUserdefault 但这似乎不起作用。我什至想知道是否可以从 touchesBegan (带开关)保存数据。

任何想法都非常感谢。谢谢。

这是动画的代码(为简洁起见缩短为三个水龙头):

 - (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 回答