GestureRecognizer的动作不会触发

时间:2017-06-29 06:46:35

标签: ios objective-c uigesturerecognizer

我添加手势以查看以下步骤:

@interface iCarousel () <UIGestureRecognizerDelegate>  
{ 
     UIPanGestureRecognizer * mPanGesture;  
     UITapGestureRecognizer * mTapGesture; 
}
@end  
@implementation iCarousel
- (void)setUp  
{
    _contentView = [[UIView alloc] initWithFrame:self.bounds];  

    _contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;  

    /  
    mPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(iCarouselDidPan:)];  
    mPanGesture.delegate = self;  
    [_contentView addGestureRecognizer:mPanGesture];  

    /  
    mTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(iCarouselDidTap:)];  
    mTapGesture.delegate = self;  
    [_contentView addGestureRecognizer:mTapGesture];  

    /  
    self.accessibilityTraits = UIAccessibilityTraitAllowsDirectInteraction;  
    self.isAccessibilityElement = YES;  

    [self addSubview:_contentView];  
} 
- (id)initWithCoder:(NSCoder *)aDecoder  
{  
    if ((self = [super initWithCoder:aDecoder]))  
    {  
        [self setUp];  
    }  
    return self;  
}  

- (id)initWithFrame:(CGRect)frame  
{  
    if ((self = [super initWithFrame:frame]))  
    {  
        [self setUp];  
    }  
    return self;  
}  

...  


- (void)iCarouselDidTap:(UITapGestureRecognizer *)tapGesture  
{  
     ...  
}  


- (void)iCarouselDidPan:(UIPanGestureRecognizer *)panGesture  
{  
     ...  
}  

...  

@end  

现在,这个类中的方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gesture

返回我是

但是,行动iCarouselDidPan:和iCarouselDidTap:不要开火。

信息以gestureRecognizerShouldBegin:方法打印。

(lldb) po _contentView.gestureRecognizers 
<__NSArrayI 0x1572bec0>(  
<UIPanGestureRecognizer: 0x16dea750; state = Possible; view = <UIView 0x16dea640>; target= <(action=iCarouselDidPan:, target=<iCarousel 0x16dea1b0>)>>,
<UITapGestureRecognizer: 0x16e8f310; state = Possible; view = <UIView 0x16dea640>; target= <(action=iCarouselDidTap:, target=<iCarousel 0x16dea1b0>)>> 
)  
(lldb) po gesture 
<UIPanGestureRecognizer: 0x16dea750; state = Possible; view = <UIView 0x16dea640>; target= <(action=iCarouselDidPan:, target=<iCarousel 0x16dea1b0>)>> 

它只发生在设备上&lt; 4s 9.3.x,5 10.3.1&gt;现在。

3 个答案:

答案 0 :(得分:1)

尝试在[pid 18509] write@SYS(1, "before", 6before) = 6 [pid 18509] libjvm.so->memcpy(0x7fc2325f7410, 0xf341dec0, 1, 0xc0100800 ... [pid 18509] libjvm.so->memcpy(0x7fc2325f73b0, 0xf341dec0, 11, 0xc0100800 ... [pid 18509] write@SYS(1, "hello world", 11hello world) = 11

中实施协议UIGestureRecognizerDelegate的以下方法
iCarousel

答案 1 :(得分:0)

在.h文件中声明UIGestureRecognizerDelegate

手势定义

-(UITapGestureRecognizer*)setTapGesture{

    UITapGestureRecognizer *Tap = [[UITapGestureRecognizer alloc]
                                           initWithTarget:self action:@selector(handleTapWithGestureRecognizer:)];
    Tap.delegate = self;
    return Tap;

}
-(void)handleTapWithGestureRecognizer:(UITapGestureRecognizer *)TapGestureRecognizer{
    NSLog(@"tap Gesture");
}

-(UIPanGestureRecognizer*)setpanGesture{

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];
    return panRecognizer;

}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {

    [self.view bringSubviewToFront:recognizer.view];
     CGPoint touchLocation = [recognizer locationInView:self.view];
     self.YOURVIEW.center = touchLocation;
}

调用手势或向您的视图添加手势

[self.YOURVIEW addGestureRecognizer:[self setTapGesture]];
[self.YOURVIEW addGestureRecognizer:[self setpanGesture]];

self.YOURVIEW.userInteractionEnabled = YES;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

祝你好运 快乐的编码。

答案 2 :(得分:0)

不能正常工作的可能情况。

1 - 您需要启用视图交互。

 [_contentView setUserInteractionEnabled:YES];

2 - 在课堂上添加此代表。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}