tag:ios7.1]では修正されました。 この問題を解決するためには、何も調整しないでください。
どうやらiOS8.0や8.1でも同じ問題が再発するようです
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が期待通りに動作しています。
.
どなたか、一度だけ呼び出して、その状態をオンまたはオフにする方法を教えてください。
**更新しました。
これが私のデモです。
以下のコードをご覧ください。
-(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");
}
}
同じ問題に直面している多くのユーザーがいるので、これは「UISwitch」のバグかもしれませんが、その一時的な解決策を今見つけました。1つのgitHub
カスタムKLSwitch
を見つけたので、今のところこれを使用しています。
スイッチの値の変化に即座に反応する必要がない場合は、次のような方法が考えられます。
- (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];
}
}