iOS7 UISwitchのイベントValueChanged:連続して呼び出すのはバグか何か?

Edit

tag:ios7.1]では修正されました。 この問題を解決するためには、何も調整しないでください。

Edit2

どうやらiOS8.0や8.1でも同じ問題が再発するようです

編集3

tag:ios9.2]では修正されています。

Edit3 [tag:ios9.2]で直りました。


今日、UISwitchのイベントValueChanged:継続的に呼ばれていて、OnからOffまたはOffからOnに変更している間に、指が右にも左にも動いているのを見ました。NSLogでもっとわかりやすくするためにGIF画像を添付します。

.

私の価値観の変化の方法は

- (IBAction)changeSwitch:(id)sender{

    if([sender isOn]){
        NSLog(@"Switch is ON");
    } else{
        NSLog(@"Switch is OFF");
    }

}

iOS6では、同じコードのSwitchが期待通りに動作しています。

.

どなたか、一度だけ呼び出して、その状態をオンまたはオフにする方法を教えてください。

**更新しました。

これが私のデモです。

プログラムによるUISwitchの追加.

XIBによるUISwitchの追加.

以下のコードをご覧ください。

-(void)viewDidLoad
{
    [super viewDidLoad];    
    UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(130, 235, 0, 0)];    
    [mySwitch addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:mySwitch];
}

- (void)changeSwitch:(id)sender{
    if([sender isOn]){
        NSLog(@"Switch is ON");
    } else{
        NSLog(@"Switch is OFF");
    }
}
解説 (2)
ソリューション

同じ問題に直面している多くのユーザーがいるので、これは「UISwitch」のバグかもしれませんが、その一時的な解決策を今見つけました。1つのgitHubカスタムKLSwitchを見つけたので、今のところこれを使用しています。

https://github.com/KieranLafferty/KLSwitch

解説 (0)

スイッチの値の変化に即座に反応する必要がない場合は、次のような方法が考えられます。

- (IBAction)switchChanged:(id)sender {
  [NSObject cancelPreviousPerformRequestsWithTarget:self];

  if ([switch isOn]) {
      [self performSelector:@selector(enable) withObject:nil afterDelay:2];
  } else {
      [self performSelector:@selector(disable) withObject:nil afterDelay:2];
  }
}
解説 (1)