2012-07-23 51 views
3

我的問題是很奇怪的,但簡單。 我一個子類我的客戶的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:檢查它是否入站。這可能工作當運動速度很慢,但是當你移動速度非常快,系統無法檢測到每一個點位,這似乎是在一定的時間間隔檢測到移動。 任何一個可以幫助我如何檢測用戶手指是否已移出界限

回答

1

我已解決此問題 bcs UIScrollView做了太多的工作,我們無法自己處理某些事件,幸運的是,UIView可以檢測到touche移出界限並將調用touchesEnd:withEvent:方法。 考慮到與UIView的替代MyScrollView的超有太多的工作要做,所以我想出了一個簡單的方法來解決: 我加入從UIView的子類的TouchActionDetectView,他們的工作是檢測所有用戶觸摸事件和MyScrollView提供這些事件。當然我必須清除TouchActionDetectView的背景顏色以避免阻止其他視圖內容。

+0

是的,touchesEnd在這種情況下叫。 – deko 2014-10-22 13:45:06

3

我認爲touchesCancelled:withEvent:方法將被調用!

+1

不,touchchesCledlled:withEvent:也不叫 – Roen 2012-07-24 03:34:13

+0

謝謝,這對我很有效,但是在觸摸拖拽(或平移)時,即使平底鍋沒有完成,它也會接縫着火。 – Gram 2015-06-02 00:20:39

相關問題