0

我有一个 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)];
}
4

2 回答 2

0

添加并UIGestureRecognizerDelegate 写入[longPress setDelegate:self];. - (void) createScrollView我认为它会对你有所帮助。

于 2012-06-19T11:38:05.900 回答
0

在视图的 touchesBegan 中:您可以延迟调用“长按”句柄。

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

然后在视图的 touchesEnded: 如果没有足够的时间过去,您可以取消该调用:

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

在视图的.h文件中添加bool *flag;并在 viewDid load 添加此标志 = true;

现在选择器 longTap: 将是:

 -(void)longTap:(id)sender
 {
   if(flag){ 
    flag = false;
    [lastView removeFromSuperView];
    }
    else{
     flag = true;
     //Create lastView reference 
     [scrollView addSubView:lastView];
    }
 }
于 2012-06-19T11:56:54.137 回答