UISwitch需要OFF然后ON点击(反之亦然),以便"保存"价值和工作

时间:2014-05-27 01:30:21

标签: ios uiswitch

我有2个视图控制器...游戏设置视图控制器(包含UISwitch)&游戏视图控制器。默认情况下,交换机的状态为ON(在故事板中设置)。该开关的功能是将对象设置为向上或向下。

步骤: 1.当我第一次加载游戏时,开关打开,我玩游戏并且根据开关设置为ON(在这种情况下向上)正确移动物体。
2.我关闭并重新打开游戏,开关打开,我将其切换为关闭,我玩游戏并根据开关设置正确移动物体(在这种情况下向下)。 [BUG] - 3.我关闭并重新打开应用程序,开关重新打开(因为这是默认设置),我玩游戏并且对象无法根据开关设置正确移动。它应该向上,因为开关打开。 [替代方法] - 我必须关闭开关然后再打开它才能工作。

以下是我的2个视图控制器:

GameSettingsViewController:

·H

@property (nonatomic, strong) IBOutlet UISwitch *UISwitchInvertGravity;

的.m

-(IBAction)SwitchGravity {

    NSUserDefaults *GravitySwitchValue = [NSUserDefaults standardUserDefaults];
    [GravitySwitchValue setBool:self.UISwitchInvertGravity.on forKey:@"SwitchOn"];
    [GravitySwitchValue synchronize];

GameViewController

的.m

-(void)ObjectMoving {

    NSUserDefaults *GravitySwitchValue = [NSUserDefaults standardUserDefaults];
    BOOL SwitchOn = [GravitySwitchValue boolForKey:@"SwitchOn"];

    if (SwitchOn) {

        object.center = CGPointMake(object.center.x, object.center.y + objectFlight);
        objectFlight = objectFlight - 5;
        if (objectFlight < -15) {
            objectFlight = -15;
        }
    }
    else {

        object.center = CGPointMake(object.center.x, object.center.y - objectFlight);
        objectFlight = objectFlight - 5;
        if (objectFlight < -15) {
            objectFlight = -15;
        }
    }

    if (objectFlight > 0) {
        object.image = [UIImage imageNamed:@"object-down.png"];
        }
    if (objectFlight < 0) {
        object.image = [UIImage imageNamed:@"object-up.png"];
    }
}

2 个答案:

答案 0 :(得分:1)

我认为你需要这样做:

1在app delegate中将userdefault中的“SwitchOn”设置为yes(此功能只是一次运行 首次启动应用程序。)。

2当您进入(加载)包含该UISwitch的viewcontroller时,将UISwitch的值设置为与“SwitchOn”userdefault值相同。

答案 1 :(得分:0)

如果我确切地知道所期望的效果是什么,我可以更好地回答它。不过,这是我的猜测。

设置UISwitch的视觉默认值不会自动将存储的 NSDefault&#34; SwitchOn&#34; 值更新为 YES / NO 布尔。

所以这是您的选择:

  1. 当您的应用程序打开时:将UISwitch值更新为存储的NSDefault值(如果有)。
  2. 或者,当您的应用程序打开时:将NSDefault值更新回所需的默认值。
  3. 如果您选择选项2,我强烈建议您只是删除此NSDefault逻辑,如果您不在任何地方使用它,因为在这种情况下它基本上没用。