Long Press Gesture和子视图不起作用

时间:2012-06-19 10:05:43

标签: iphone ios xcode

我有一个UIView,带有UISCrollView的子视图,带有视图的子视图(lastView)。我想要的是当我长按视图时它将删除lastView。然后再次长按,lastView将再次出现。我尝试过,但我只有这么远。我的lastView没有出现,我long press gesture也没有工作。

这是我的代码:

- (void)handleLongPress:(UILongPressGestureRecognizer*)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) {
        [self.slotView removeFromSuperview];
        NSLog(@"Long press Ended");
    }
    else {
        NSLog(@"Long press detected.");
    }
}

- (void) createScrollView {
    self.slotBg = [[UIView alloc] initWithFrame:CGRectMake(43, 370, 300, 143)];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.slotBg.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor grayColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
    [self.slotBg.layer insertSublayer:gradient atIndex:0];
    [self.view addSubview:self.slotBg];
    UILongPressGestureRecognizer *longPress = 
    [[UILongPressGestureRecognizer alloc] initWithTarget:self 
                                            action:@selector(handleLongPress:)];
     longPress.minimumPressDuration = 2.0;
    [slotBg addGestureRecognizer:longPress];

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,300.0f,134.0f)];
    [slotBg addSubview:scrollView];

    self.slotView = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f,300.0f,134.0f)];
    [scrollView addSubview:slotView];

    int row = 0;
    int column = 0;
    for(int i = 0; i < _thumbs.count; ++i) {

        UIImage *thumb = [_thumbs objectAtIndex:i];
        UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(column*60+10, row*60+10, 60, 60);
        [button setImage:thumb forState:UIControlStateNormal];
        [button addTarget:self 
                   action:@selector(buttonClicked:) 
         forControlEvents:UIControlEventTouchUpInside];
        button.tag = i; 

        [scrollView addSubview:button];

        if (column == 4) {
            column = 0;
            row++;
        } else {
            column++;
        }

    }

    [scrollView setContentSize:CGSizeMake(330, (row+1) * 60 + 10)];
}

2 个答案:

答案 0 :(得分:0)

UIGestureRecognizerDelegate中添加[longPress setDelegate:self];并撰写- (void) createScrollView。我认为这对你有帮助。

答案 1 :(得分:0)

在视图中触摸开始:你可以稍微调用“长按”句柄。

[touchHandler performSelector:@selector(longTap:) withObject:nil afterDelay:1.5];

然后在视图的touchesEnded:如果时间不够,你可以取消该电话:

[NSObject cancelPreviousPerformRequestsWithTarget:touchHandler selector:@selector(longTap:) object:nil];

在.h文件中添加 bool * flag ;并在viewDid加载中添加此 flag = true;

现在选择器longTap:将是:

 -(void)longTap:(id)sender
 {
   if(flag){ 
    flag = false;
    [lastView removeFromSuperView];
    }
    else{
     flag = true;
     //Create lastView reference 
     [scrollView addSubView:lastView];
    }
 }