我的問題是很奇怪的,但簡單。 我一個子類我的客戶的UIScrollView:MyScrollView,其中i禁用滾動:touchesEnded:withEvent:方法當拖動事件移出屏幕頂部的不叫/底部
self.scrollEnabled = NO;
,這意味着除了
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
所有其他UIScrollViewDelegate方法不會被調用 和MyScrollView我做的通過檢測用戶在屏幕上的觸摸運動來滾動內容,也就是說不翻動,不反彈,我的實現在觸摸移動:withEvent:方法
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// NSLog(@"touch.phase:%d",touch.phase);
CGPoint currentPosition = [touch locationInView:self];
CGPoint lastTouchPosition = [touch previousLocationInView:self];
CGFloat deltaY = lastTouchPosition.y - currentPosition.y;
CGFloat contentYOffset = self.contentOffset.y + deltaY;
[self setContentOffset:CGPointMake(0,contentYOffset) animated:NO];
}
用戶拖動動作已經完成後,我就根據內容touchesEnded MyScrollView偏移我自己的方法:withEvent:方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//some implementation according to current content offset
}
用戶在屏幕上移動手指,當手指離開屏幕表面時, touchesEnded:withEvent:被調用,我可以正確實現我自己的方法。但是,當用戶將屏幕表面上的手指從屏幕內部移動到外部或頂部或底部時,然後擡起手指,touchesEnded:withEvent:方法永遠不會被調用,它看起來像ios不處理移動界限(頂部或底部)事件作爲觸摸結束事件,也ios不知道當觸摸是在它之外的情況發生了什麼事情屏幕邊界
有人可能會建議我檢測touchesMoved中的當前位置: withEvent:檢查它是否入站。這可能工作當運動速度很慢,但是當你移動速度非常快,系統無法檢測到每一個點位,這似乎是在一定的時間間隔檢測到移動。 任何一個可以幫助我如何檢測用戶手指是否已移出界限
是的,touchesEnd在這種情況下叫。 – deko 2014-10-22 13:45:06