私のアプリケーションでは、ボタンを押すと、iOS のデフォルトのボタン アニメーションで backgroundcolor などの番号が変更されます。ボタンのデフォルトの動作は、数値が [x, x+1] または [x-1, x] の間隔でのみ指定できるようになっています。ここで、x は初期値です。しかし、ボタンをすばやく押すと、同様の数が急速に増加するか、急速に減少します。
func likeButtonAction(sender:UIButton!) {
var oldValue = sender.titleLabel?.text?.toInt()
println("oldvalue \(oldValue)")
if sender.selected {
//upvote
sender.setTitle(String(oldValue! + 1), forState: UIControlState.Normal|UIControlState.Selected)
println("inc \(oldValue! + 1)")
} else {
//downvote
sender.setTitle(String(oldValue! - 1), forState: UIControlState.Normal|UIControlState.Selected)
println("dec \(oldValue! - 1)")
}
}
EDIT1: すばやく押した場合の出力は次のとおりです。
oldvalue Optional(3)
inc 4
oldvalue Optional(4)
dec 3
oldvalue Optional(3)
inc 4
oldvalue Optional(4)
dec 3
oldvalue Optional(4)
inc 5
oldvalue Optional(5)
dec 4
oldvalue Optional(5)
inc 6
oldvalue Optional(6)
dec 5
oldvalue Optional(6)
inc 7
oldvalue Optional(7)
dec 6
oldvalue Optional(7)
inc 8
oldvalue Optional(8)
dec 7
oldvalue Optional(8)
inc 9
oldvalue Optional(9)
dec 8
oldvalue Optional(8)
inc 9
EDIT2: 解決策: これは正常に動作しますが、理由がわかりません。説明をいただければ幸いです
func likeButtonAction(sender:UIButton!)
if sender.selected {
//upvote
sender.setTitle(String((sender.titleLabel?.text?.toInt())! + 1), forState: UIControlState.Normal|UIControlState.Selected)
} else {
//downvote
sender.setTitle(String((sender.titleLabel?.text?.toInt())! - 1), forState: UIControlState.Normal|UIControlState.Selected)
}
}