我有UITableView的视图。在此列表上方,我有UIButton。我需要实现一个动画,它将根据滚动列表垂直移动按钮,并在滚动完成后返回基本位置。我在下面的图片中向下滚动显示:
现在我检测开始和停止滚动列表事件并执行这样的动画:
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGRect newFrame = button.frame;
newFrame.origin.y = screenHeight - (newFrame.size.height/2.0);
[UIView animateWithDuration:2
animations:^{
button.frame = newFrame;
}];
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGRect newFrame = storedButtonFrame;
[UIView animateWithDuration:2
animations:^{
button.frame = newFrame;
}];
}
我对此问题几乎没有问题,当我向下滚动动画时动画结束然后结束,我想基于滚动列表进行动画制作,例如。当我向下滚动列表10px时,我想只将10px的按钮移动到列表的末尾。其次是当开始滚动动画仍然在运行时我得到停止滚动事件开始动画闪烁到结束并且结束动画开始动画什么是我绝对不想要的东西。我在iOS中没有太多的经验,我真的没有任何ide我怎么能这样做。知道怎么做这样的事情吗?
答案 0 :(得分:4)
您可以像scrollViewWillBeginDragging:
一样使用scrollViewDidScroll:
,而不是/// Animate the button position as the scroll view scrolls
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat percentage = scrollView.contentOffset.y / scrollView.contentSize.height;
CGRect frame = _button.frame;
frame.origin.y = scrollView.contentOffset.y + percentage * self.tableView.frame.size.height;
_button.frame = frame;
}
/// Animate the button back to the top-right corner
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGRect frame = _button.frame;
frame.origin.y = scrollView.contentOffset.y;
[UIView animateWithDuration:0.4f
animations:^{
_button.frame = frame;
}];
}
。
scrollViewDidScroll:
这使滚动列表时按钮跟随滚动指示器。 contentOffset.y
经常发射,因此运动平稳。
当列表停止时,它会返回到右上角的默认位置,您可以从{{1}}获得该位置。