0

私はUIViewを持っており、UISCrollViewのサブビューとview(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 に答える