2012-02-04 27 views
6

Tôi có chế độ xem cuộn và tôi muốn biến nó thành biến mất bất cứ khi nào một chảo được thực hiện. Nó hoạt động tốt và trên panning, scrollview biến mất nhưng vấn đề là bây giờ tôi không thể di chuyển các nội dung.Di chuyển bị tắt khi tôi thêm A UIPangesturerecognizer vào UIScrollView

[UIView animateWithDuration:0.2 
         delay:0.2 
        options: UIViewAnimationCurveLinear 
       animations:^{ 
        slideView.frame=CGRectMake(268, 0, 500, 950); 
        curtain.frame=CGRectMake(0, 0, 268, 950); 
        curtain.backgroundColor=[[UIColor alloc]initWithRed:0 green:0 blue:0 alpha:0.6]; 
        [self.view addSubview:slideView]; 
        [self.view addSubview:curtain]; 

       } 
       completion:^(BOOL finished){ 
        NSLog(@"Done!"); 
       }]; 

đây là làm thế nào tôi làm thế nào tôi làm UIScrollView của tôi xuất hiện (SlideView là scrollview) .Và sau đó tôi thêm một pangesturerecognizer.All hoạt động tốt nhưng di chuyển bị vô hiệu hóa. (panImage một lần nữa giấu slideview của tôi.) Làm thế nào để làm cho công trình di chuyển. ??

[slideView addGestureRecognizer:panImage]; 

Trả lời

12

UIScrollView có công cụ nhận dạng cử chỉ riêng, điều khiển cuộn. Bằng cách thêm một trình nhận dạng cử chỉ di chuyển khác, bạn đang ngăn cản trình nhận dạng cử chỉ di chuyển của chế độ xem cuộn của bản thân hoạt động.

Có một số cách để giải quyết vấn đề này, nhưng sẽ hữu ích nếu bạn có thể giải thích cách hệ thống phải biết khi người dùng đang cố loại bỏ chế độ xem cuộn và khi người đó đang cố cuộn, vì bạn muốn có cử chỉ pan để làm cả hai.

Ví dụ: bạn có thể đặt đại biểu của cả hai trình nhận dạng cử chỉ để cho phép trình nhận dạng hoạt động đồng thời (bằng cách ghi đè phương thức gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:). Bạn có thể làm cho mỗi trình nhận dạng cử chỉ yêu cầu số lần chạm khác nhau (bằng cách đặt các thuộc tính minimumNumberOfTouchesmaximumNumberOfTouches). Bạn có thể sử dụng một số UISwipeGestureRecognizer để nhận ra cử chỉ bỏ qua. Bạn có thể phát hiện khi người dùng cố gắng cuộn qua cạnh trái của chế độ xem cuộn bằng cách ghi đè phương thức scrollViewDidScroll: của đại biểu của chế độ xem cuộn.

+1

Bạn phải nhận ra nhiều cử chỉ đồng thời, nhưng bạn cũng cần tắt tính năng di chuyển trong khi xử lý cử chỉ của mình. Xem @miroslav. – SwiftArchitect

2

Bạn có thể đặt mức ưu tiên của panGestureRecognizers theo cách thủ công. Đây là cách tôi giải quyết cùng một vấn đề: trong delegate (BOOL) gestureRecognizerShouldBegin: Tôi đã vô hiệu cuộn trong scrollView của tôi nếu nó sẽ trả về YES. Và trong phần đầu của một bộ chọn của panGestureRecognizer của tôi, tôi đã bật tính năng cuộn.

Trong đại biểu này, bạn có thể tạo điều kiện của trình panGestureRecognizer để bật theo cách như vậy, nó sẽ hoạt động nếu và chỉ khi bạn muốn nó có ưu tiên chính.

1

phương pháp Swift,
Cần thêm UIGestureRecognizerDelegate đến lớp học của bạn:

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

Cần thiết lập đại biểu của mình cho tự:

override func viewDidLoad() { 
    super.viewDidLoad() 
    var scrollView = UIScrollView(frame: self.view.frame) 
    scrollView.delegate = self 
} 

Thêm phần này trong các phương pháp lớp học của bạn để cử chỉ đồng thời tích cực :

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 
Các vấn đề liên quan