UIImageView无法识别第二次手势

时间:2011-10-19 08:46:35

标签: iphone uiimageview gesture

我已在UITapGestureRecognizer上实施了UIImageView,它正在开始工作。在第一次点击时,我隐藏了该图像并开始动画。动画完成后,我再次显示图像。但是在设置setHidden:FALSE后,我没有收到UIImageView的点击事件。

以下是我正在使用的代码:

- (void)viewDidLoad{

[super viewDidLoad];

defaultDogView= [[UIImageView alloc] initWithFrame:CGRectMake(3, 270, 110, 210)];
[defaultDogView setImage:[UIImage imageNamed:@"dog1.png"]];
defaultDogView.userInteractionEnabled = YES;
[self addGestureRecognizersToPiece:defaultDogView];


[self.view addSubview:defaultDogView];
}

- (void)addGestureRecognizersToPiece:(UIImageView *)piece 
{
NSLog(@"in Gesture");
   UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapPiece:)];
[tapGesture setDelegate:self];

[piece addGestureRecognizer:tapGesture];
[tapGesture release];

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressPiece:)];
[piece addGestureRecognizer:longPressGesture];
[longPressGesture release];

NSLog(@"%@", [piece gestureRecognizers]);
}
- (void)singleTapPiece:(UITapGestureRecognizer *)gestureRecognizer
{
NSLog(@"Image Tapped");

/** Hide the default Image and start the animation ***/

[defaultDogView setHidden:TRUE];

/***Animating the Dog***/
[dogArray addObject:[SpriteHelpers setupAnimatedDog:self.view numFrames:69 withFilePrefix:@"dog" withDuration:(12) ofType:@"png" withValue:0]];
dogView = [dogArray objectAtIndex:0];
//[self addGestureRecognizersToPiece:dogView];



[self performSelector:@selector(callBubbleUpdater) withObject:nil afterDelay:5.5];


}
-(void)showDogFrame{
NSLog(@"%@",[defaultDogView gestureRecognizers]);
[defaultDogView setHidden:FALSE];
defaultDogView.userInteractionEnabled = YES;

}

2 个答案:

答案 0 :(得分:1)

viewhidden或其alpha组件zero时,该视图将不会收到任何UIGestureRecognizers

如果您需要隐藏某些视图(我们将其命名为touchableView),我可以建议您使用下一种方法,但希望它能够响应手势:

  1. 使用与backgroundView相同的框架创建touchableView

    UIView *backgroundView = [[UIView alloc] initWithFrame:touchableView.frame];

  2. backgroundView的背景颜色设置为clearColor

    backgroundView.backgroundColor = [UIColor clearColor];

  3. 重置touchableView的位置:

    CGRect frame = touchableView.frame; frame.origin.x = 0; frame.origin.y = 0;

  4. 禁用touchableView的用户互动:

    touchableView.userInteractionEnabled = NO;

  5. touchableView作为子视图添加到backgroundView

    [backgroundView addSubview:touchableView];

  6. backgroundView添加适当的手势识别器。

  7. 添加backgroundView以查看您想要的内容。

  8. 现在您可以隐藏touchableView,但您仍会收到手势识别器。

    我不测试这个,但我认为它应该有用。

答案 1 :(得分:0)

确定

隐藏UIImageView时。它没有收到任何触摸事件

为uiimageview设置alpha值