不考虑延迟的UILabel动画帧改变



我有一个UILabel,我显示/隐藏。我想显示标签,暂停几秒钟,然后隐藏它。这个代码不能工作。它会在动画完成后立即移除视图

-(void) show
{
    [UIView animateWithDuration:.5f delay:0.0f
                        options:UIViewAnimationOptionCurveEaseIn  animations:^{
                    CGRect newFrame = CGRectMake(0.0f, 64.0f, [UIScreen mainScreen].bounds.size.width, 44.0f);
                    self.frame = newFrame;
    }                completion:^(BOOL finished){
                            [self hideAndRemove];
    }];
}
-(void) hideAndRemove
{
    [UIView animateWithDuration:.5f delay:2.0f
                        options:UIViewAnimationOptionCurveEaseIn  animations:^{
        CGRect frame = CGRectMake(0.0f, 64.0f, [UIScreen mainScreen].bounds.size.width, 0.0f);
        self.frame = frame;
    }                completion:^(BOOL finished){
        // nothing
    }];
}

然而,如果我在帧上尝试其他动画,延迟工作并且帧变化是动画的:

-(void) show
{
    [UIView animateWithDuration:.5f delay:0.0f
                        options:UIViewAnimationOptionCurveEaseIn  animations:^{
                    CGRect newFrame = CGRectMake(0.0f, 64.0f, [UIScreen mainScreen].bounds.size.width, 44.0f);
                    self.frame = newFrame;
    }                completion:^(BOOL finished){
                            [self hideAndRemove];
    }];
}
-(void) hideAndRemove
{
    [UIView animateWithDuration:.5f delay:2.0f
                        options:UIViewAnimationOptionCurveEaseIn  animations:^{
        CGRect frame = CGRectMake(0.0f, 64.0f, [UIScreen mainScreen].bounds.size.width, 250.0f);
        self.frame = frame;
    }                completion:^(BOOL finished){
        // nothing
    }];
}

我不知道问题可能是什么,但我认为它来自帧高度谁不应该设置为0。

为什么不使用[UILabel setAlpha:0]来隐藏你的标签,并[UILabel setAlpha:1]来显示它?这看起来比将帧高改为0更简洁,而且动画效果也很好。

最新更新