如何检测主视图UILongPressGestureRecognizer和子视图UIPanGestureRecognizer

时间:2012-06-05 00:47:13

标签: iphone ios xcode uiview uipangesturerecognizer

我的UILongPressGestureRecognizer和UIPanGestureRecognizer遇到了问题。

我希望长时间按下我的self.view,在我的self.view中添加一个UIPanGestureRecognizer视图。

然而,UIPanGestureRecognizer无法识别。

我错过了什么吗?

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //[self initImagesAndGesture];

    UILongPressGestureRecognizer *tapRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(addImgView:)];
    tapRecognizer.numberOfTouchesRequired = 1;
    tapRecognizer.minimumPressDuration = 0.7;
    [tapRecognizer setDelegate:self];
    self.view.userInteractionEnabled = YES;

    [self.view addGestureRecognizer:tapRecognizer];   
}

-(void)addImgView:(UILongPressGestureRecognizer *)recognizer
{
    NSLog(@"tappppp");

    if(UIGestureRecognizerStateBegan == recognizer.state) {
        // Called on start of gesture, do work here

        NSLog(@"UIGestureRecognizerStateBegan");
        UIImage *img = [UIImage imageNamed:@"beer.png"];
        UIImageView *imgView = [[UIImageView alloc]initWithImage:img];

        UILabel *timeStamp = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
        timeStamp.text = [NSString stringWithFormat:@"%f",[NSDate date]];

        UIView *drinkView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
        [drinkView setUserInteractionEnabled:YES];

        CGPoint tapLocation = [recognizer locationInView:recognizer.view];

        [timeStamp setCenter:CGPointMake(tapLocation.x, tapLocation.y)];
        [imgView setCenter:CGPointMake(tapLocation.x,tapLocation.y)];

        [drinkView addSubview:imgView];
        [drinkView addSubview:timeStamp];

        [drinkView setUserInteractionEnabled:YES];

        [imgView setUserInteractionEnabled:YES];
        [timeStamp setUserInteractionEnabled:YES];

        UIPanGestureRecognizer *recognizer1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan1:)];
        [recognizer1 setDelegate:self];
        [drinkView addGestureRecognizer:recognizer1];
        [self.view addSubview:drinkView];

    }

}

1 个答案:

答案 0 :(得分:2)

-(void)addImgView:(UILongPressGestureRecognizer *)recognizer
{
    NSLog(@"tappppp");

    if(UIGestureRecognizerStateBegan == recognizer.state) {
        // Called on start of gesture, do work here

        NSLog(@"UIGestureRecognizerStateBegan");
        UIImage *img = [UIImage imageNamed:@"beer.png"];
        UIImageView *imgView = [[UIImageView alloc]initWithImage:img];

        UILabel *timeStamp = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 150, 30)];
        timeStamp.text = [NSString stringWithFormat:@"%f",[NSDate date]];

        UIView *drinkView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 75,115)];
        drinkView.backgroundColor=[UIColor redColor];
        [drinkView setUserInteractionEnabled:YES];

        CGPoint tapLocation = [recognizer locationInView:recognizer.view];

        [drinkView setCenter:CGPointMake(tapLocation.x,tapLocation.y)];



        [drinkView setUserInteractionEnabled:YES];
       [imgView setUserInteractionEnabled:YES];
        [timeStamp setUserInteractionEnabled:YES];

        [drinkView addSubview:imgView];
        [drinkView addSubview:timeStamp];


        UIPanGestureRecognizer *recognizer1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan1:)];
        [recognizer1 setDelegate:self];
        [drinkView addGestureRecognizer:recognizer1];


        [self.view addSubview:drinkView];

    }

    if(UIGestureRecognizerStateChanged == recognizer.state) {
        // Do repeated work here (repeats continuously) while finger is down
        NSLog(@"UIGestureRecognizerStateChanged");

    }

    if(UIGestureRecognizerStateEnded == recognizer.state) {
        // Do end work here when finger is lifted
        NSLog(@"UIGestureRecognizerStateEnded");

    }
}