请查看编辑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
触发器,问题就消失了。为什么会发生这种情况,我该如何解决这个问题呢?
答案 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