如何动画删除标签?

时间:2015-01-06 21:46:19

标签: ios objective-c uiscrollview uiscrollviewdelegate caanimation

我有一个视图控制器,它有一个水平弹跳的滚动视图,在这个滚动视图中我有一个标签。

我现在可以拿着标签并将其向下滚动,如果我发布它会反弹回来。

我想要的是:当我将视图y坐标(使用myScrollView.contentOffset.y)滚动到某个值时,让我们说-33然后我可以释放我的罚款,标签将动画到屏幕的底部并且消失,现在我可以将标签设置为新值,它将从顶部到标签原始位置设置动画。

这是一张视图控制器如何显示的照片:

enter image description here

这是我已经实施的相关方法(由@ rebello95提供):

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (self.myScrollView.contentOffset.y <= -73) {

        [UIView animateWithDuration:0.3 animations:^{
            self.homeLabel.alpha = 0.0;
        } completion:^(BOOL finished) {
            [self.homeLabel removeFromSuperview];
            self.homeLabel = nil;
        }];
    }

    NSLog(@"%f", self.myScrollView.contentOffset.y);
}

现在我希望它滑到页面底部并淡出。

谢谢!

1 个答案:

答案 0 :(得分:1)

编辑:动画现在将标签移动到视图控制器的底部,然后将其淡出。

您可以使用动画块移动标签,然后将另一个块放入完成块内以淡出标签,然后在动画完成后将其删除。

示例:

[UIView animateWithDuration:0.3 animations:^{
    [self.myLabel setFrame:CGRectMake(self.myLabel.frame.origin.x, self.view.frame.size.height - self.myLabel.frame.size.height, self.myLabel.frame.size.width, self.myLabel.frame.size.height)];
    self.labelRemoving = YES;
} completion:^(BOOL finished) {
    [UIView animateWithDuration:0.3 animations:^{
        self.myLabel.alpha = 0.0;
    } completion:^(BOOL finished) {
        [self.myLabel removeFromSuperview];
        self.myLabel = nil;
        self.labelRemoving = NO;
    }];
}];

旁注:您应该在<=中使用==代替if statement来获得所需的结果。此外,您可能需要设置一个标志以指示您的标签被删除(因为该方法将不可避免地被多次调用)。像这样:

//.h
@property (nonatomic, assign) BOOL labelRemoving;

//.m
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (self.myScrollView.contentOffset.y <= -33 && !self.labelRemoving) {

        [UIView animateWithDuration:0.3 animations:^{
            [self.myLabel setFrame:CGRectMake(self.myLabel.frame.origin.x, self.view.frame.size.height - self.myLabel.frame.size.height, self.myLabel.frame.size.width, self.myLabel.frame.size.height)];
            self.labelRemoving = YES;
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:0.3 animations:^{
                self.myLabel.alpha = 0.0;
            } completion:^(BOOL finished) {
                [self.myLabel removeFromSuperview];
                self.myLabel = nil;
                self.labelRemoving = NO;
            }];
        }];
    }

    NSLog(@"%f", self.myScrollView.contentOffset.y);
}