2

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

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

这是代码:

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

谢谢。

4

4 回答 4

2

官方文档中

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

于 2012-08-10T02:26:45.973 回答
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];
于 2012-08-10T03:02:07.473 回答
0

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

在 Xcode 6 中,应用在模拟器中运行,转到顶部栏中的“调试”,选择“查看调试”和“捕获视图层次结构”。然后去搜索你丢失的标签。您还可以在右侧 Xcode 栏中查看标签的属性等。

于 2015-04-09T12:38:56.127 回答
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];
                 }
 ];
于 2012-08-13T17:46:18.927 回答