我有一个视图控制器,它有一个水平弹跳的滚动视图,在这个滚动视图中我有一个标签。
我现在可以拿着标签并将其向下滚动,如果我发布它会反弹回来。
我想要的是:当我将视图y坐标(使用myScrollView.contentOffset.y
)滚动到某个值时,让我们说-33然后我可以释放我的罚款,标签将动画到屏幕的底部并且消失,现在我可以将标签设置为新值,它将从顶部到标签原始位置设置动画。
这是一张视图控制器如何显示的照片:
这是我已经实施的相关方法(由@ 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);
}
现在我希望它滑到页面底部并淡出。
谢谢!
答案 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);
}