次のジェスチャがどれになるかは誰にもわかりません: ある領域 (ボタンなど) 内をクリックし、指を押したままにし、指を放さず、領域領域の外に指を移動すると想像してください?? それに何らかのジェスチャーはありますか?
選択/強調表示された状態で起動するボタンがありますが、ユーザーが(指を使用して)クリックし、指を離さず、ボタン領域の外に指を移動すると、ボタンの選択が解除されます-これは私が望んでいないことです。誰か助けてくれませんか?
次のジェスチャがどれになるかは誰にもわかりません: ある領域 (ボタンなど) 内をクリックし、指を押したままにし、指を放さず、領域領域の外に指を移動すると想像してください?? それに何らかのジェスチャーはありますか?
選択/強調表示された状態で起動するボタンがありますが、ユーザーが(指を使用して)クリックし、指を離さず、ボタン領域の外に指を移動すると、ボタンの選択が解除されます-これは私が望んでいないことです。誰か助けてくれませんか?
「TouchUpOutside」ボタンイベントを処理する必要があります。
==編集==
UIControl
の*TrackingWithTouch:withEvent:
メソッドをオーバーライドして、必要な動作を取得できます。
@interface CustomButton : UIButton
@end
実装
@interface CustomButton()
// Auxiliary property
@property(nonatomic, assign) BOOL isHighlightedBeforeTouch;
@end
@implementation CustomButton
-(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
self.isHighlightedBeforeTouch = self.highlighted;
return [super beginTrackingWithTouch:touch withEvent:event];
}
-(BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
BOOL result = [super continueTrackingWithTouch:touch withEvent:event];
if( self.isHighlightedBeforeTouch && !CGRectContainsPoint(self.bounds, [touch locationInView:self]) ) {
dispatch_async(dispatch_get_main_queue(), ^{
self.highlighted = self.isHighlightedBeforeTouch;
});
}
return result;
}
-(void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
dispatch_async(dispatch_get_main_queue(), ^{
self.highlighted = self.isHighlightedBeforeTouch;
});
[super endTrackingWithTouch:touch withEvent:event];
}
@end
強調表示されたプロパティを変更するには、たとえばボタンが押されたときにオンにします。
-(IBAction)buttonPressed:(UIButton*)sender
{
dispatch_async(dispatch_get_main_queue(), ^{
[sender setHighlighted:![sender isHighlighted]];
});
}
UIGesture レコグナイザー: UIPanGestureRecognizer を使用する必要があります。