0

次のジェスチャがどれになるかは誰にもわかりません: ある領域 (ボタンなど) 内をクリックし、指を押したままにし、指を放さず、領域領域の外に指を移動すると想像してください?? それに何らかのジェスチャーはありますか?

選択/強調表示された状態で起動するボタンがありますが、ユーザーが(指を使用して)クリックし、指を離さず、ボタン領域の外に指を移動すると、ボタンの選択が解除されます-これは私が望んでいないことです。誰か助けてくれませんか?

4

2 に答える 2

0

「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]];
  });
}
于 2012-12-25T12:36:42.383 に答える
0

UIGesture レコグナイザー: UIPanGestureRecognizer を使用する必要があります。

于 2012-12-25T14:07:31.670 に答える