我正在尝试实现特定的tableview行为(比如Facebook应用)。
我希望每次用户向上滚动时都会放大一个动态标题,当用户向下滚动时会被尖叫。
此外,我希望tableview能够产生推动标题的效果,而不是滚动tableview单元格。
我使用了这个方法:
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
在这个方法中,我计算了偏移量和方向,并调用了相应缩小或放大标题的方法
到目前为止一切顺利。
事实是动画正在使用tableview滚动执行。
为了避免它,我在tableview的顶部创建了一个自定义滚动视图,我对两个滚动视图进行了不同的分类。
在scrollview中,我创建了一个tableview的弱引用和一个布尔值,指示scrollview是否应返回tableview touch。
缩小\放大动画完成后,我更改了布尔值,这样它就会发出自定义scrollview信号,以便在我在滚动视图中实现的HitTest方法中返回tableview。
但是当用户继续滚动时没有调用hitTest(没有翻动手指),此外我的tableViewCell里面的按钮现在没有反应。
这是我的HitTest方法:
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView* result = [super hitTest:point withEvent:event];
if (_recieveTouchOnTable)
{
return _table;
}
else
return result;
}
这是我的scrollViewDidScroll方法: (onProgress表示正在执行动画,因此请继续返回自定义scrollview) Tag = 2 =自定义滚动视图 Tag = 1 = tableview
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
CGFloat yVelocity = [aScrollView.panGestureRecognizer velocityInView:aScrollView].y;
CGFloat offset = lastCustomScrollViewContentOffset.y-aScrollView.contentOffset.y;
lastCustomScrollViewContentOffset =aScrollView.contentOffset;
if (yVelocity<0)
offset = fabs(offset)*-1;
else if(yVelocity>0)
offset = fabs(offset);
if (offset!=0 && aScrollView.tag == 2)
[self layoutViewAccorrdingToTableviewScorlingVelocity:offset];
if (!onProgress ){
customScrollView.recieveTouchOnTable=YES;
}
}
我错过了什么,或者有更简单的方法可以做到吗?