在animateWithDuration之后,UILabel消失

时间:2012-08-10 02:12:51

标签: ios objective-c-blocks

我有一个UILabel可以滑入和滑出视图,但在滑回之后它会消失。我希望它能坚持下去。

我怎样才能做到这一点?另外,为什么会这样呢?

以下是代码:

[UIView animateWithDuration:0.1
                          delay:0.0
                        options:UIViewAnimationOptionAutoreverse
                     animations:^{
                         [self.listLabel setFrame:CGRectMake(325, 141, 320, 181)];
                     }
                     completion:nil];

感谢。

4 个答案:

答案 0 :(得分:2)

official documentation

UIViewAnimationOptionAutoreverse 向后和向前运行动画。必须与UIViewAnimationOptionRepeat选项结合使用。

答案 1 :(得分:0)

为什么不为标签使用UIViewAnimationOptionCurveEaseOut和UIViewAnimationOptionCurveEaseIn动画选项? 只需设置你的标签的frame.origin.x = [在它的超级视图的右侧之外] 当您想要使用EasyOut动画再次滑入时,将其设置回原始位置。 这就是我所说的......

CFRect frame = self.listLabel.frame;
//Point to hide your label by sliding it outside the right side of it's parent's view.
// mask or clipToBounds of parent's view must be YES
frame.origin.x = [self.listLabel.superview.frame.size.width]; 
[UIView animateWithDuration:0.1
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [self.listLabel setFrame:frame];
                 }
                 completion:nil];

当你想要重新滑入时,使用相反的动画和标签的原始位置,当然你需要将它的原始位置存储在某处,这样你就可以将它滑回来。

 [UIView animateWithDuration:0.1
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     [self.listLabel setFrame:label_original_frame];
                 }
                 completion:nil];

答案 2 :(得分:0)

UIViewAnimationOptionAutoreverse专为循环动画而设计。要在屏幕外和背面反弹,你应该把它写成2个动画:

CGRect originalFrame = self.listLabel.frame;
[UIView animateWithDuration:0.05
                      delay:0.0
                    options:UIViewAnimationOptionLayoutSubviews
                 animations:^{
                     [self.listLabel setFrame:CGRectMake(325, 141, 320, 181)];
                 }
                 completion:^(BOOL finished){
                    [UIView animateWithDuration:0.05
                                          delay:0.0
                                        options:UIViewAnimationOptionLayoutSubviews
                                     animations:^{
                                         [self.listLabel setFrame:originalFrame];
                                     }
                                     completion:nil];
                 }
 ];

答案 3 :(得分:0)

由于似乎仍然没有有效的答案,我提出了一种(现在可能的)方法:

在Xcode 6中,当应用程序在模拟器中运行时,转到顶部栏中的“Debug”,选择“View Debugging”和“Capture View Hierarchy”。然后去搜索你丢失的标签。您还可以在右侧Xcode栏中看到Label的属性等。