我在动画后更改按钮文字时遇到了问题。
在我的.h文件中定义
@property (weak, nonatomic) IBOutlet UIButton *btnCheck;
当我想要为按钮位置更改设置动画时,我会调用此方法
- (void)updateViews {
if(checkedIn){
[UIView animateWithDuration:0.3f
delay:0.0f
options:UIViewAnimationOptionTransitionNone
animations:^{
btnClear.hidden = YES;
[btnCheck setFrame:CGRectMake(90, btnCheck.frame.origin.y, btnCheck.frame.size.width, btnCheck.frame.size.height)];
}
completion:nil];
}else{
[UIView animateWithDuration:0.3f
delay:0.0f
options:UIViewAnimationOptionTransitionNone
animations:^{
[btnCheck setFrame:CGRectMake(20, btnCheck.frame.origin.y, btnCheck.frame.size.width, btnCheck.frame.size.height)];
}
completion:^(BOOL finished){
btnClear.hidden = NO;
}];
}
checkedIn = !checkedIn;
}
这完美,下面的图片供参考:
问题是,一旦我尝试更改按钮的名称,它就会跳回原来的框架。
我用另一种方法更改按钮文字,这是
btnCheck.titleLabel.text = @“test”;
一旦我改变按钮跳回来
是什么原因导致按钮框重置?
我已经尝试在动画之前,期间和完成时更改它。它会动画到新位置并跳回来。
答案 0 :(得分:3)
这可能不会回答您的问题,但是当您想要更改框架中的一个属性时,我会向您展示更改框架的更好方法
CGRect buttonFrame = [btnCheck frame];
buttonFrame.origin.x = newXOrigin;
[UIView animateWithDuration:0.3f
animations:^{
[btnCheck setFrame:buttonFrame];
}];
我更喜欢这种方法,因为您不必创建新的CGRect并复制粘贴所有未修改的框架属性。 Ow和你可能想要从动画块中获取隐藏的作业,因为它不能被动画
答案 1 :(得分:2)
您不应该以这种方式更改UIButton
的标题。相反,请尝试使用setTitle:forState:
方法设置标题。试试这个,让我知道这是否有用,祝你好运!
答案 2 :(得分:2)
导致问题的是Autolayout。禁用,一切正常