所有UIButton的延迟执行块

时间:2016-10-13 16:12:28

标签: ios objective-c uiscrollview uibutton

我的项目有UIButtons,执行代码块需要1秒钟。

我在其他项目中的按钮工作正常,但由于一些奇怪的原因,这个项目有一个恼人的延迟。

按钮是dailer编号,因此需要快速按下:  下面是一个例子:

- (IBAction)phonePressed:(id)sender {
    UITapGestureRecognizer *backspaceGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(backspace)];
    UIButton *one = [[UIButton alloc] initWithFrame:CGRectMake(menuShadowLayer2.frame.origin.x+10, menuShadowLayer2.frame.origin.y+10, 80, 80)];
    one.layer.cornerRadius = 40;
    one.layer.borderColor = [UIColor lightGrayColor].CGColor;
    one.layer.borderWidth = 1;
    [one setBackgroundColor:[UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:0.3]];
    [one setTitle:@"1" forState:UIControlStateNormal];
    [one.titleLabel setTextAlignment:NSTextAlignmentCenter];
    [one setTitleColor:[UIColor whiteColor]forState:UIControlStateNormal];
    [one.titleLabel setFont:[UIFont fontWithName:@"STHeitiSC-Light" size:50]];
    [container addSubview:one];
    [one addGestureRecognizer:tap1];
...

- (void)dailed1 {
    numberDailed.text = [numberDailed.text stringByAppendingString:@"1"];
    NSLog(@"1");
}

这是使用UIControlEventTouchUpInside的另一个按钮,如果不慢,也会很慢。

UIButton *cancel = [[UIButton alloc] initWithFrame:CGRectMake(numberDailed.frame.origin.x, numberDailed.frame.origin.y+200, numberDailed.frame.size.width+40, 110)];
    cancel.layer.cornerRadius = 15;
    [cancel setImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
    cancel.clipsToBounds = YES;
    [container addSubview:cancel];
    [cancel addTarget:self
             action:@selector(clearNumber:)
   forControlEvents:UIControlEventTouchDown];
...

-(IBAction)clearNumber:(id)sender{
    [numberDailed setText:@""];
}

我使用UITapGestureRecognizer使用按钮UIControlEventTouchUpInsideTouchDown更慢。

当按下此按钮(one)时,我必须等待大约半秒到一秒,然后再次点击。当你输入数字和一半的数字时,这显然会让人感到沮丧。

我已将UIScrollView设为delaysContentTouches = NO; 按钮立即突出显示。它根本不会立即执行代码。 我使用按钮one作为示例,但这适用于我项目中的所有UIButtons。 思考?

3 个答案:

答案 0 :(得分:0)

您使用手势的地方

[one addGestureRecognizer:tap1];

相反,您应该使用按钮操作

[one addTarget:self action: @selector(dailed1:)];

答案 1 :(得分:0)

夫妻俩。首先,像这样创建你的按钮:

UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom];
numberButton.frame = CGRectMake(...);

其次,正如其他人所指出的那样,你不需要任何手势,但应该在按钮上附加一个动作/目标:

[numberButton addTarget:self action:@selector(numberDialled:) forControlEvents: UIControlEventTouchUpInside];

第三,创建您的IBAction:

- (IBAction) numberDialled:(id)sender

答案 2 :(得分:0)

在我的项目中问题与MapBox API(不推荐)有关,删除了所有内容。所有代码都很好,已经回到表演选择器并删除了手势。