0

我正在创建一个自定义视图,它包含Refresh、* LayoutSubviews * 等方法,遵循本教程

我想要一个标签动画增长,它的全宽,然后回到 0 宽度。我在“刷新”方法中使用此代码:

[UIView animateWithDuration:1.3 animations:^{
        CGRect frame = CGRectMake(50, 15, 140, 20);
        [labelFav setFrame:frame];
    } completion:^(BOOL finished) {
        //[labelFav setHidden:YES];
        [UIView animateWithDuration:1.3 animations:^{
            CGRect frame = CGRectMake(50, 15, 0, 20);
            [labelFav setFrame:frame];
        }];

    }];

该代码适用于任何其他视图,但由于由于某种原因这是一个自定义视图,因此完成块未执行。发生的事情是它只执行第一个块。我在“完成”块中设置了一个断点,它停在那里但动画没有发生。我试图 setHidden 标签,但仍然没有发生。

有任何想法吗?

4

2 回答 2

0

解决问题的另一种方法。经测试。

[UIView animateWithDuration:1.3 animations:^{

    CGRect frame = CGRectMake(50, 15, 140, 20);
    [labelViewForFav setFrame:frame];

} completion:^(BOOL finished) {

   [UIView animateWithDuration:1.3 animations:^{

                CGRect frame = CGRectMake(50, 15, 0, 20);
                [labelViewForFav setFrame:frame];

        } completion:^(BOOL finished) {

        }];
}];

问题是当您使 UIlabel 宽度小于其当前宽度时。动画没有正确完成。动画不可见只是跳到最后一帧。

解决它把你的标签放在一个视图中,改变这个视图的大小,它就会正常工作。

于 2013-10-08T14:16:09.087 回答
0

从界面生成器主屏幕中删除自动布局。您的视图可能正在改变它的框架,但自动布局(可能)在其他地方强制它......

于 2013-10-08T15:02:11.123 回答