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