【问题标题】:recognizing gesture in iOS在 iOS 中识别手势
【发布时间】:2012-12-25 12:20:58
【问题描述】:

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

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

【问题讨论】:

  • 任何使用iOS的设备上都没有鼠标。
  • 我正在使用模拟器进行测试,这就是我在那里提到鼠标的原因

标签: ios


【解决方案1】:

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

【讨论】:

  • 您好,谢谢。我会检查它,但你也知道一件事吗?如果我覆盖以下方法: [btn addTarget:self action:@selector(myActionMethod) forControlEvents:UIControlEventTouchUpOutside];并尝试在其中设置按钮的选定状态,它不起作用 - 你知道为什么吗?谢谢。任何帮助表示赞赏。即 -(void) myActionMethod { btn.highlighted = YES; btn.selected = 是; }
【解决方案2】:

您需要处理“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]];
  });
}

【讨论】:

  • 谢谢。我修改了我的帖子,你认为你的建议在这种情况下也有用吗?附言。添加 TouchUpOutside 方法时抛出异常,可能是什么问题???谢谢。 ` [myBtn addTarget:self action:@selector(myActionMethod:) forControlEvents:UIControlEventTouchUpOutside]; -(void) myActionMethod { NSLog(@"窃听外部"); }`
  • 使用 @selector(myActionMethod) 或将操作方法​​更改为 -(void)myActionMethod:(id)sender {...}
  • 您好,它解决了异常问题,但选择/取消选择仍然无法正常工作(请参阅我更新的帖子)。谢谢
  • 可能您的意思是未选中按钮突出显示的螺母状态?
  • 是的,可能会突出显示;例如,我使用这些属性设置的东西: btn.highlighted = YES; btn.selected = YES;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多