0

谁知道下面的手势是什么:想象一下我在某个区域(比如一个按钮)内单击,我按住手指,不松开它,然后将手指移到该区域之外?有什么手势吗?

我有一个以选中/突出显示状态启动的按钮,但是如果用户单击它(使用手指),没有松开他/她的手指,将他/她的手指移到按钮区域之外,我的按钮会被取消选择- 这是我不想要的。有人可以帮忙吗?

4

2 回答 2

0

您需要处理“Touch Up Outside”按钮事件。

==编辑==

你可以重写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

你需要使用,UIGesuture 识别器:UIPanGestureRecognizer。

于 2012-12-25T14:07:31.670 回答