1

我需要识别执行滑动的方向并知道我视图中的哪个对象发送了它。我现在找到了解决方法,但它看起来很复杂而且很可怕,所以我怀疑有没有最简单的解决方案?我的解决方法是几句话:

  1. 我将识别器附加到视图上的每个 UIButton 对象。
  2. 有指示器显示在执行滑动期间点击了哪个按钮
  3. 我必须检查这个指示器并滑动方向以做出正确的决定,应该移动哪个对象以及它应该向哪个方向移动。

谢谢你的建议。

@synthesize 滑动方向;//显示滑动方向的标签
@synthesize 按钮编号;//标签显示被点击的按钮数量

    - (void)viewDidLoad
    {
        UIButton* 按钮 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //创建按钮       
        [按钮 setTitle:@"test1" forState:UIControlStateNormal];                        
        button.frame = CGRectMake(100, 100, 100, 100);
        [button addTarget:self //添加选择器,它将更新指示器被点击的按钮,没有点击按钮无法进行滑动
                   动作:@选择器(更新按钮编号:)
         forControlEvents:UIControlEventTouchDown];
        [按钮设置标签:1];
        [self.view addSubview:button]; //添加按钮查看
        [self beginListenToSwipes:button]; //向方法发送按钮,该方法将为 4 个方向添加 UISwipeGestureRecognizer

        /*第二个按钮的相同任务*/
        UIButton* button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];            
        [button1 setTitle:@"test2" forState:UIControlStateNormal];                        
        button1.frame = CGRectMake(200, 200, 100, 100);
        [button1 addTarget:自我                         
                   动作:@选择器(更新按钮编号:)
         forControlEvents:UIControlEventTouchDown];
        [button1 setTag:2];
        [self.view addSubview:button1];
        [self beginListenToSwipes:button1];

    }

    /*每次我们点击按钮(开始滑动时调用此方法并且buttonNumber总是指向当前按钮*/
    -(void)updateButtonNumber:(UIButton*)sender
    {
        self.buttonNumber.text = [NSString stringWithFormat:@"%d",sender.tag];
    }

    /*方法接收 UIButton 并添加识别器*/
    - (void) beginListenToSwipes:(UIButton*)sender
    {
        UISwipeGestureRecognizer *recognizer;
        识别器 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        [识别器设置方向:(UISwipeGestureRecognizerDirectionRight)];
        [发送者 addGestureRecognizer:recognizer];

        识别器 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        [识别器设置方向:(UISwipeGestureRecognizerDirectionLeft)];
        [发送者 addGestureRecognizer:recognizer];

        识别器 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        [识别器设置方向:(UISwipeGestureRecognizerDirectionUp)];
        [发送者 addGestureRecognizer:recognizer];

        识别器 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        [识别器设置方向:(UISwipeGestureRecognizerDirectionDown)];
        [发送者 addGestureRecognizer:recognizer];
    }

    /*滑动执行时调用的方法并显示执行的方向*/
    -(void)handleSwipe:(UISwipeGestureRecognizer *)recognizer
    {
        int i = 识别器.方向;
        self.swipeDirection.text = [NSString stringWithFormat:@"%d",i];
    }

4

2 回答 2

1

我的想法是,

  1. 注册touchUpoutsideUIButton 的事件。
  2. 当您将手指移出按钮时,它将被触发。
  3. 从 touchesEnded 方法中找到接触点并存储在类级变量中。
  4. 比较touchupoutside方法中的按钮框和触摸点,找出移动的方向。
于 2012-05-03T13:19:12.430 回答
0

我想你也可以把你的手势识别器放在 self.view 中,然后看看手势是否发生在有问题的控件上(显然,你想让你的按钮 ivars 或你的 viewcontroller 的属性,这样你就可以跟踪这是哪个),例如

CGPoint point = [sender locationInView:self.view];
if (CGRectContainsPoint(button1.frame, point))
    // do whatever you want

是否在 UIGestureRecognizerStateBegan 或 UIGestureRecognizerStateEnded 或两者都执行此逻辑取决于您。

更新:

顺便说一句,如果您正在检测您正在移动的方向,您还可以考虑使用 UIPanGestureRecognizer,它在单个手势识别器中处理所有四个方向(并且因为它是连续的,您可以在UI 动画移动)。

于 2012-05-03T13:07:32.177 回答