2013-10-10 85 views
2

我試圖創建一個水平滾動的UIScrollView。 I am using this Ray Wenderlich tutorial。我有滾動視圖出現和工作正常,但目前在本教程的「檢測滾動視圖之外的觸摸」部分難住。以編程方式檢測滾動視圖之外的觸摸

問題是我正在編程創建一切。我特別難倒約(ScrollViewContainer.m在)教程這部分代碼:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event { 
    UIView *view = [super hitTest:point withEvent:event]; 
    if (view == self) { 
     return _scrollView; 
     } 
    return view; 
} 

其中_scrollView是一個IBOutlet(在ScrollViewContainer.h):

@property (nonatomic, strong) IBOutlet UIScrollView *scrollView; 

正如我理解它,_scrollView「連接」是通過插座在故事板上完成的。我該如何以編程方式做到這一點?

回答

0

檢測scrollview之外的觸摸,您可以簡單地訪問UIViewtouchEvents

  • 的touchesBegan,
  • touchesEnded,
  • touchesMoved,
  • touchesCancelled

嘗試接觸開始爲你想要的任何單一的水龍頭。

1

使用此代碼我找到了我的觸摸對象並隱藏了視圖,因此希望您可以使用一些技巧修改它並修改相同的代碼,只需傳遞您的scrollview對象並在其內部觸摸即可。

#pragma mark 
#pragma mark - Touch Events 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint imgPop = [touch locationInView: _scrollView]; 
    if ([_scrollView pointInside:imgPop withEvent:event]) 
    { 
     NSLog(@"Touch Inside ScrollView"); 
    } else { 
     NSLog(@"Touch Outside ScrollView"); 
    } 
} 

讓我知道你是否發現任何困難來實現它。

0

也就是說,如果你做了滾動視圖越小,畫面只需要在雷Wenderlich教程定製hitTest:withEvent:方法(並設置其clipsToBoundsNO):

app screenshot

的方法將使觸摸在滾動視圖之外發生的事情將被轉發給它。

因此,在你的源代碼,你需要調用類似

@property (nonatomic, strong) UIScrollView *scrollView; 
... 
UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(
    20, 
    20, 
    self.view.frame.size.width - 20, 
    self.view.frame.size.height - 20 
)];