动画UIButton更改文本更改的位置

时间:2013-11-27 08:21:00

标签: ios objective-c layout uibutton uianimation

我在动画后更改按钮文字时遇到了问题。

在我的.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;
}

这完美,下面的图片供参考: Animation Animation

问题是,一旦我尝试更改按钮的名称,它就会跳回原来的框架。

我用另一种方法更改按钮文字,这是

  

btnCheck.titleLabel.text = @“test”;


一旦我改变按钮跳回来
test

是什么原因导致按钮框重置? 我已经尝试在动画之前,期间和完成时更改它。它会动画到新位置并跳回来。

3 个答案:

答案 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。禁用,一切正常