CoreGraphics でカスタム描画を行うために、UIButton をサブクラス化しましたdrawRect:
。タッチ イベントに応答するために、次のターゲット/アクションを追加しています。
[self addTarget:self action:@selector(selectedButton:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside];
[self addTarget:self action:@selector(deSelectedButton:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchDragOutside | UIControlEventTouchUpOutside];
実装例は次のとおりです。
- (void)selectedButton:(id)sender {
self.isSelected = YES;
[self setNeedsDisplay];
}
これはかなりうまくいきます。唯一の問題は、タッチダウン/タッチアップが非常に速くてもアクションは処理されますが、selected/deSelected メソッドが非常に速く呼び出されるため、バックグラウンドが更新されないことです。でも、もう少し長く押すとうまくいきます。
ここで何が欠けていますか?わずかなタッチでバックグラウンドを更新するにはどうすればよいですか? レイアウトを更新するために deSelect 呼び出しを遅らせようとしましたが、効果がありません。