Segue延迟了UIButton的亮点

时间:2015-10-22 15:02:55

标签: ios uibutton

请查看编辑3

我有一个UIButton,按下后我需要立即看到它变灰。我使用此代码作为声明:

UIButton *myButton;
myButton = [[UIButton alloc] init];    //[UIButton buttonWithType:UIButtonTypeCustom];
myButton.frame = CGRectMake(132, 375, 40, 40);
buttonImage = [UIImage imageNamed:@"chat.png"];
[myButton setImage:buttonImage forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(myButtonInvoked:)forControlEvents:UIControlEventTouchDown];
[cell.contentView addSubview:myButton];

这是按钮触发的方法

- (void) myButtonInvoked:(id)sender
{
    UIButton *catchButton = (UIButton *)sender;

    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];

    [UIView animateWithDuration:5
                      delay:0.0
                    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     catchButton.alpha = 0.4;
                     catchButton.enabled = NO;
                 }
                 completion:NULL];   

    [self performSegueWithIdentifier:@"hereToThere" sender:self];
}

我使用 UIAnimation 代码使按钮在按下时显示为灰色,注意它的延迟为0,但 UIButton 会延迟显示。我该怎样摆脱这种延迟?我需要 myButton 才能立即变灰。

修改

我现在尝试添加commentsButton.showsTouchWhenHighlighted = YES;并尝试在UIControlStateNormal中为按钮设置图像并突出显示为相同但灰色的图像也会延迟。

但是,如果我在方法的开头放置一个NSLog,我可以看到它在触摸按钮时立即打印,那么为什么它不能立即更新图像?我已完全尝试了以下所有内容以尝试使其工作:

  

A)突出显示

     

B)改变图像

     

C)改变UIButton的alpha值

我也把它放在方法中,看看它是否有用。

catchButton.highlighted = YES;
[catchButton setImage:[UIImage imageNamed:@"chatHighlighted.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

编辑2

我只是使用@selector(methodHere :)以完全相同的方式设置一个简单的UIButton,并且alpha会立即更改。必须有其他原因导致延迟吗?现在超级困惑。

编辑3 通过注释掉上面myButtonInvoked:方法中的最后一行(见下文):

[self performSegueWithIdentifier:@"hereToThere" sender:self];

..立即(视觉上)设置myButton.alpha = 0.4触发器,问题就消失了。为什么会发生这种情况,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

试试这个。

 [UIView animateWithDuration:0.0 //0.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut//UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat |
                 animations:^{
                     catchButton.alpha = 0.4;
                     catchButton.enabled = NO;
                 }
                 completion:NULL];

延迟发生:因为你正在使用

animateWithDuration = 5 second