おそらくiOS7のバグ。
どんな現象かは以下を見るとよくわかる。
ios - iOS7 UISwitch it's Event ValueChanged: Calling continuously is this Bug or what..? - Stack Overflow
解決方法は以下。
Viewのプロパティにvalue changedイベントが呼ばれる前の値を保持しておき、
それと比較して値が変化している場合のみ処理を行う。
@interface CustomView () @property (nonatomic) BOOL previousValue; @end @implementation CustomView - (IBAction)valueChangedSwitch:(id)sender { if (self.previousValue != self.switch.on) { // 処理 self.previousValue = self.switch.on; } } @end