删除UIButton的手势

use*_*826 1 objective-c uibutton uigesturerecognizer ios uipangesturerecognizer

UIGestureRecognizer用于平移,旋转,捏.但我正在申请整个观点.我需要删除子视图以外的按钮的手势.但是,当我使用泛按钮也影响.如何限制按钮从self.view移动.我使用下面的代码UIPanGestureRecognizer.

UIPanGestureRecognizer *dbpan = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                        action:@selector(ondbPan:)];

[self.view addGestureRecognizer:dbpan];

[closeButton removeGestureRecognizer:dbpan];
Run Code Online (Sandbox Code Playgroud)

泛:

- (void)ondbPan:(UIPanGestureRecognizer *)gesture
{
    if ((gesture.state == UIGestureRecognizerStateChanged) ||
        (gesture.state == UIGestureRecognizerStateEnded)) {


        CGPoint offset = [gesture translationInView:self.view];

        CGPoint center = gesture.view.center;
        center.x += offset.x;
        center.y += offset.y;
        gesture.view.center = center;

        [gesture setTranslation:CGPointZero inView:self.view];

    }
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*hel 5

UIGestureRecognizer如果子视图是类UIButton类,请尝试使用返回FALSE的委托代码.dbpan.delegate = self;在设置和添加时也设置委托UIPanGestureRecognizer.

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
      if ([touch.view isKindOfClass:[UIButton class]])
      {
           return FALSE;
      }
      else
      {

         return TRUE;
      }
}
Run Code Online (Sandbox Code Playgroud)

更新: -

我不知道为什么不能在你的最后工作我测试这个创建一个演示以及使用此代码: -

.h文件

@interface myviewcontroller : UIViewController<UIGestureRecognizerDelegate>
Run Code Online (Sandbox Code Playgroud)

和.m类

- (void)pan:(UIPanGestureRecognizer *)gesture
{
    if ((gesture.state == UIGestureRecognizerStateChanged) ||
        (gesture.state == UIGestureRecognizerStateEnded)) {

        CGPoint location = [gesture locationInView:self.view];

        [demoView setCenter:location];
    }
}

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[UIButton class]])
    {
        return FALSE;
    }
    else
    {

        return TRUE;
    }
}

- (void)viewDidLoad
{


    UIPanGestureRecognizer *dbpan = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                            action:@selector(pan:)];
    dbpan.delegate=self;
    [self.view addGestureRecognizer:dbpan];
    [super viewDidLoad];
}

-(IBAction)B1called
{

    NSLog(@"This is called button 1");

}
-(IBAction)B2called
{
     NSLog(@"This is called button 2");

}
Run Code Online (Sandbox Code Playgroud)

它的输出是

在此输入图像描述