2013-06-19 32 views
11

我有這這樣初始化的PageViewController:UISlider內UIPageViewController

self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll 
          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

在頁面中的一個,有一個UISlider。

我的問題是,當我將transitionstyle設置爲UIPageViewControllerTransitionStyleScroll時,在滑塊上調用beginTrackingWithTouch之前需要150-200毫秒。 當我使用UIPageViewControllerTransitionStylePageCurl,即時選擇UISlider時,看不到此行爲。

這意味着,除非用戶在拖動滑塊(視頻進度)之前等待了一段時間,否則該頁面將轉向,這遠非理想狀態。

頁面捲曲動畫不符合該應用程序的要求,所以任何解釋或解決方法表示讚賞。

回答

16

由於與UIPageViewControllerTransitionStyleScroll手勢識別器不可用,您可以使用此:

for (UIView *view in pageViewController.view.subviews) { 
    if ([view isKindOfClass:[UIScrollView class]]) { 
     UIScrollView *scrollView = (UIScrollView *)view; 
     scrollView.delaysContentTouches = NO; 
    } 
} 
+1

是的,這工作得很好!簡單而有效。 – Camputer

+0

嗨,我不明白如何使用這個解決方案......你可以開發更多的地方添加這段代碼,以及爲什麼在scrollView上設置delayContentTouches的作品?謝謝 –

+0

你可以在創建你的UIPageViewController後把這段代碼放在下一行。或者你可以繼承UIPageViewController並將這段代碼放在viewDidLoad方法中,只需使用'self'而不是'pageViewController'。當'delaysContentToushes'爲'NO'時,滾動視圖立即向內容轉發,並且在內容處理觸及之前不嘗試執行滾動。 –

0

你可以嘗試在頁面視圖控制器手勢代表設置爲根視圖控制器:

for (UIGestureRecognizer* gestureRecognizer in self.pageViewController.gestureRecognizers) { 
    gestureRecognizer.delegate = self; 
} 

然後防止手勢的觸摸,如果它出現內部UISlider這是UIControl的子類:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    return ([touch.view isKindOfClass:[UIControl class]] == NO); 
} 
+0

問題是gesturerecognizers未設置時,transitionstyle = UIPageViewControllerTransitionStyleScroll,因此這個問題:[link](http://stackoverflow.com/questions/13103613/uipageviewcontroller-returns-no-gesture-recognizers-in-ios-6 ) –

0

我解決了上UISlider添加一個平移手勢這個問題,並設置:

self.sliderGesture.cancelsTouchesInView = NO; // make touch always triggered 

和實施委託方法,如:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return otherGestureRecognizer.view.superview == self.parentViewController.view; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    // only receive touch in slider 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    return CGRectContainsPoint(self.slider.frame, touchLocation); 
} 
0

什麼幫助我是添加泛手勢識別器的UIView其中包含UISlider,所以最後我有 UIPageViewController-> UIScrollView - > ...-> MyView-> UISlider 「MyView」的東西有登錄到它的平移手勢什麼也沒做,但只是不傳播事件到滾動視圖。

相關問題