2012-09-21 33 views
8

Trong iOS 6 beta 4 và iOS 5.1.1 tôi đã có vuốt sang trái/phải cho phép người dùng vuốt giữa QLPreviewControllers khác nhau, được lưu trữ trong UIViewController.iOS 6 UIGestures (Vuốt) ngừng hoạt động với QLPreviewController

Trong phiên bản iOS 6 đã phát hành, các lần vuốt hiện đã bị bỏ qua hoàn toàn.

Đã cố gắng đặt UIView làm chế độ xem phụ của trình điều khiển xem trước nhằm giúp chế độ xem lưu trữ trình điều khiển xem trước để chặn các lần vuốt trước khi trình điều khiển xem trước có cơ hội nuốt chúng, nhưng chúng không bao giờ được kích hoạt.

Bất kỳ ai nhìn thấy điều này hoặc biết về một công việc xung quanh.

Cảm ơn,

+4

Tôi đang gặp vấn đề tương tự với dự án mà tôi tham gia. –

Trả lời

2

Tôi đã gặp vấn đề tương tự nhưng với UITapGestureRecognizer không hoạt động trên QLPreviewController. Trong iOS 6 điều đó giống như một lỗ đen cho các đối tượng UIGestureRecognizer ... không có gì làm cho nó ra khỏi đó!

Tuy nhiên tôi đã tìm được giải pháp thay thế. Tôi subclassing QLPreviewController, vì vậy trong lớp con của tôi, tôi bị lạm dụng (tương đối) Phương pháp viewWillLayoutSubviews mới và thêm vào đoạn mã sau:

UIView *overlay = [[UIView alloc] initWithFrame:self.view.frame]; 
overlay.backgroundColor = [UIColor whiteColor]; 
overlay.alpha = .002f; 
for (UIView *v in self.view.subviews) 
{ 
    [v addSubview:overlay]; 
} 
[overlay release]; 

Nó có thể là quá mức cần thiết, nhưng tôi về cơ bản đã đi vào tất cả các subviews cái nhìn nhanh chóng và bổ sung một cái nhìn cho họ rằng sẽ chấp nhận cử chỉ. Tôi đã đi với 0,002 alpha bởi vì làm cho nó thấp hơn sẽ gây ra các cử chỉ được bỏ qua một lần nữa.

+0

Tuyệt vời, cảm ơn vì điều này. Trong khi điều này làm việc tôi sẽ lưu ý rằng bạn mất tất cả các hành vi QLPreviewController tiêu chuẩn, zoom, cuộn, vv –

+0

Điều này không nguy hiểm? Thêm cùng một cá thể UIView dưới dạng một chế độ xem con vào nhiều chế độ xem? Một thể hiện của một khung nhìn chỉ có thể xuất hiện một lần trong một hệ thống phân cấp khung nhìn. – Echelon

+0

Đó là một hack để bắt đầu với. Giống như Ben cho biết, nó chặn các cử chỉ được xây dựng trong QLPreviewController. Tôi thực sự đã từ bỏ cuối cùng và đi với UIDocumentInteractionController. Không thể đặt các cử chỉ tùy chỉnh trên đó, nhưng đó là một kết hợp tốt hơn cho những gì nhóm của tôi đang tìm kiếm. Vẫn không vui, nhưng tôi phải tiếp tục. = -/Đối với câu hỏi của bạn, tôi không có vấn đề với việc sử dụng lại chế độ xem.Nhưng bạn có thể dễ dàng tạo vòng lặp for tạo chế độ xem mới cho mỗi lớp phủ. – ghostatron

1

giải pháp cố gắng của bạn đã được đóng, nhưng có lẽ ngược từ những gì bạn nên làm. Thay vì thêm một chế độ xem khác làm phần phụ của trình điều khiển xem trước, hãy thêm trình điều khiển xem trước làm chế độ xem phụ của UIView.

Xem trước bộ điều khiển xem trước bên trong UIView chuẩn. Sau đó, gán lại cử chỉ của bạn cho bộ sưu tập gestureRecognizers của UIView, loại bỏ chúng khỏi bộ sưu tập của QLPreviewController.

Không chắc chắn lý do tại sao điều này thay đổi, nhưng tôi đã có cùng một vấn đề với ứng dụng của tôi, ngoại trừ tôi đó là UITableView không cuộn nữa.

+1

Xin chào David, Cảm ơn bạn đã đề xuất, tôi đã thử cách tiếp cận và nó hoạt động trong iOS 5, nhưng trong iOS 6 QLPreviewController vẫn chặn tất cả cử chỉ khi tài liệu được tải. –

2

Tôi cũng thấy rằng sử dụng cùng một mã, UIGestureRecognizers đã ngừng hoạt động trong iOS 6. Nhưng nó không phải là hoàn toàn bị hỏng. Dự án mẫu phát triển của Apple "SimpleGestureRecognizers" vẫn hoạt động. Sau khi so sánh mã, tôi thấy rằng "addGestureRecognizer" đã giải quyết vấn đề (ngoài tất cả các bước khác bạn đã sử dụng để làm theo IB). Giả sử một trong các tên IBOutlets của bạn leftSwiftRecognizer, bạn có thể làm:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    .... 
    // swipe recognizer 
    [self.view addGestureRecognizer:self.leftSwiftRecognizer]; 

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