3

私は現在、UISwitchオンとオフを切り替えると、それぞれカウンターをインクリメントおよびデクリメントするというものを持っています。

カウンターが0の場合、カウンターはデクリメントしません。機能的には、これは完全に機能しますが、バグに気づき、誰かがこれを経験したことがあるかどうか疑問に思いました。

基本的に、UISwitchを遠い位置(完全にオンまたはオフ)で非常にすばやくダブルタップすると、UISwitchが完全にオフ状態になっていないため、カウンターが2倍に増加します。これは、UISwitchが完全にオフ状態になっていないためです。最初にそれをデクリメントします。

スイッチのチェックを行うために使用しているコードは次のとおりです。

// Sliders modified

- (IBAction)personalityChanged:(id)sender {
    if ([personality isOn] ){
        [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"1"];
        rating ++;
        NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
        [personality set]
    }
    else {
        [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"0"];
        [self subtractFromRating:nil];
        NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
    }
    [self checkRating:nil];
}

次に、評価を減算します。

// subtract from rating

-(void)subtractFromRating:(id)sender{
    if (rating == 0) {
        // do nothing
    }
    else
    {
        rating --;
    }
}

そして最後に、スライダーが所定の位置にある場合に何が起こるかの結果:

// check rating

-(void)checkRating:(id)sender{
    switch (rating) {
        case 0:
            [matchRating setText:@""];
            [ratingGraphic setImage:[UIImage imageNamed:@""]];
            NSLog(@"rating is 0");
            break;
        case 1:
            [matchRating setText:@"Single Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic1.png"]];
            NSLog(@"rating is 1");
            break;
        case 2:
            [matchRating setText:@"Potential Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic2.png"]];
            NSLog(@"rating is 2");
            break;
        case 3:
            [matchRating setText:@"Great Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic3.png"]];
            NSLog(@"rating is 3");
            break;
        case 4:
            [matchRating setText:@"Hot Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic4.png"]];
            NSLog(@"rating is 4");
            break;
        default:
            break;
    }
}

戻る前にスイッチがオン状態から完全にオフになっていることを確認する方法はありますか、またはこれに対するより良いアプローチはありますか?

4

1 に答える 1

3

実際に変更があったかどうかを検出するための解決策は、最後のスイッチ状態を追跡する追加のBOOL変数を保持することです。

BOOL lastValue = NO; // initial switch state
- (IBAction)personalityChanged:(id)sender {
    if (personality.isOn != lastValue) {
        lastValue = personality.isOn;
        if ([personality isOn] ){
            [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"1"];
            rating ++;
            NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
            [personality set]
        }
        else {
            [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"0"];
            [self subtractFromRating:nil];
            NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
        }
        [self checkRating:nil];
    }
}

これは、スイッチの状態が実際に変更された場合にのみ実行されます。

于 2012-10-18T01:05:51.927 に答える