2013-01-05 86 views
7

我有一個透明UIView下的UIScrollView。我需要將所有平底鍋和水龍頭轉移到滾動視圖(僅水平滾動)。常規UIView使用UIPanGestureRecognizer的子類來跟蹤垂直平底鍋(Subclass found here)。在覆蓋視圖中,我重寫觸摸事件方法以將它們傳遞給UIScrollView。將觸摸信息傳遞給另一個UIView下的UIScrollView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesBegan:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesBegan:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesBegan:touches withEvent:event]; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesCancelled:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesCancelled:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesCancelled:touches withEvent:event]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesEnded:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesEnded:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesEnded:touches withEvent:event]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 
    [self.scrollView.panGestureRecognizer touchesMoved:touches withEvent:event]; 
    [self.scrollView.singleTapGesture touchesMoved:touches withEvent:event]; 
} 

覆蓋視圖,垂直鍋完美的作品。在UIScrollView中,水龍頭也很完美。滾動,但不是很多。滾動視圖滾動大約三個點,然後停止(因爲我繼續水平平移。)如果我放開速度,滾動視圖然後拾取該速度並結束滾動。

什麼可能導致滾動視圖停止滾動,然後拿起速度的問題?

回答

2

從你發佈的代碼中,我假設你沒有對透明UIView做任何事情。那你爲什麼不設置userInteractionEnabled = NO; ??

+0

假設透明視圖需要響應至少一種類型的觸摸,例如滑動或其他。 –

+0

嗯......我不知道爲什麼你的滾動停止和提取速度..但我會做的是..讓我的UIScrollView處理所有事件..包括滑動,透明UIView應該處理...並創建一個回調函數,將該事件傳遞給該UIView ...還禁用UIView上的userInteractionEnabled ..所以UIScrollView以它應該的方式工作。nd UIView將處理它應該處理的唯一事件,因爲UIScrollView會抓住它並傳遞它的UIView ...也許爲時已晚,你回去改變它..但抱歉,我不知道如何解決你的問題。 – chuthan20

0

這裏有一個更簡單的解決方案,爲我工作得好:

在透明的UIView(姑且稱之爲OverlayView的)使寬度和高度都爲0(這樣的觀點不再技術上的UIScrollView的頂部)並設置clipsToBounds = NO(以便OverlayView的內容仍顯示在UIScrollView的頂部)。

self.OverlayView.clipsToBounds = NO; 
CGRect frame = self.OverlayView.frame; 
self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0); 

請注意,如果OverlayView包含交互式控件(如上面的按鈕),那麼他們將不再工作。您需要將它移到UIScrollView上方自己的視圖中。

0
#import "CustomUiView.h" 

@implementation CustomUiView.h 

-(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event{ 
    return NO; 
} 
@end 

您不希望進行交互的視圖。 創建自定義UIView類,並使用此自定義視圖作爲頂點視圖,在pointInside方法中返回NO。然後,觸摸將自動變爲不足。在你的情況下你的透明UIView將是UIView的CustomUiView子類。

相關問題