2011-11-21 60 views
19

Tôi muốn tắt di chuyển hai ngón tay trong UIScrollView của mình.
Tôi subclassed nó và chỉnh built-in recognizers cử chỉ của nó với đoạn mã sau:Tắt di chuyển 2 ngón tay trong UIScrollView

for (UIGestureRecognizer *mgestureRecognizer in scroller.gestureRecognizers) {  
    if ([mgestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
    { 
     UIPanGestureRecognizer *mpanGR = (UIPanGestureRecognizer *) mgestureRecognizer; 
     mpanGR.minimumNumberOfTouches = 1; 
     mpanGR.maximumNumberOfTouches = 1; 

    } 

    if ([mgestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]) 
    { 
     UISwipeGestureRecognizer *mswipeGR = (UISwipeGestureRecognizer *) mgestureRecognizer; 
     mswipeGR.numberOfTouchesRequired = 1; 
    } 

Đối với một số lý do, maximumNumberOfTouches dường như không làm việc. Tôi vẫn có thể cuộn bằng một hoặc hai ngón tay. Nếu tôi thay đổi cả hai thuộc tính thành 2, tôi có thể tắt thành công thao tác cuộn một ngón tay và yêu cầu hai lần chạm.

Bất kỳ ý tưởng nào?

Trả lời

19

Tôi nhận ra đây là một chủ đề cũ, nhưng phải mất một thời gian dài tôi mới hiểu được điều này, vì vậy tôi nghĩ tôi sẽ chia sẻ. Dưới đây là những gì tôi đã làm để tắt di chuyển hai ngón tay:

// set up a two-finger pan recognizer as a dummy to steal two-finger scrolls from the scroll view 
// we initialize without a target or action because we don't want the two-finger pan to be handled 
UIPanGestureRecognizer *twoFingerPan = [[UIPanGestureRecognizer alloc] init]; 
twoFingerPan.minimumNumberOfTouches = 2; 
twoFingerPan.maximumNumberOfTouches = 2; 
[scrollView addGestureRecognizer:twoFingerPan]; 
+1

không làm việc cho tôi – Pascalius

+0

không nên nó được * 1 * cho tối thiểu và tối đa? (thay vì 2?) – yonel

+1

Mã không cho phép di chuyển 2 ngón tay bằng cách ăn cử chỉ pan 2 ngón tay.Vì vậy, tối thiểu và chạm tối đa nên được 2. –

3

nếu bạn đang sử dụng iOS SDK trên 5.0, có thể bạn có thể sử dụng trình nhận dạng cử chỉ ui pan trực tiếp.

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

...... 

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1]; 
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1]; 
+0

Cảm ơn drskur ... Nó làm việc tuyệt vời cho tôi –

0

Tôi muốn mở lại câu hỏi này.

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

...... 

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1]; 
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1]; 

Tôi đã thử giải pháp này trên iOS 7 và iOS 8 và dường như với tôi rằng setMaximumNumberOfTouches: 1 không có hiệu lực. Có thể di chuyển 2 hoặc 3 ngón tay. :(

0

tôi có thể khẳng định điều này vẫn còn là một vấn đề trong iOS 8, nhưng chỉ khi UIPanGestureRecognizer đang tiềm ẩn một UIScrollView. Tạo một UIView với một UIPanGestureRecognizer tươi và thiết maximumNumberOfTouches nó sở hữu các công trình như mong đợi.

rdar Submitted :. // 20890684 và sao chép vào http://openradar.appspot.com/radar?id=6191825677189120 Xin vui lòng để lừa

0

VẤN ĐỀ:.

Khi UIPanGestureRecognizer đang tiềm ẩn một UIScrollView (mà tiếc là cũng không ảnh hưởng đến UIPageViewController) các maximumNumberOfTouches nào hoạt động không như mong đợi - những minimumNumberOfTouches tuy nhiên luôn luôn giới hạn cuối thấp hơn một cách chính xác.

Khi giám sát các thông số này, chúng dường như thực hiện công việc của mình - chỉ là UIScrollView không tôn trọng chúng và bỏ qua giá trị của chúng!


BIỆN PHÁP:

Bạn có thể tìm ra giải pháp trong câu trả lời của tôi để:

UIScrollView scrolling only with one finger

Các vấn đề liên quan