2011-01-16 25 views
8

Hy vọng rằng ai đó có thể trợ giúp về vấn đề này. Tôi có một lớp học bắt nguồn từ UIScrollView và tôi muốn ngăn người dùng có thể phóng to hoặc cuộn qua cử chỉ vuốt và vuốt thủ công. Thay vào đó, tất cả điều hướng chế độ xem sẽ được điều khiển bằng các phương tiện có lập trình để phản hồi nơi người dùng chạm vào (nghĩ về một trình đọc sách điện tử trong đó chạm vào bên trái hoặc bên phải của màn hình sẽ làm cho chế độ xem cuộn chính xác theo chiều rộng một trang). Bất kỳ đề xuất về cách thực hiện điều này?Cách ngăn việc phóng to thủ công trong UIScrollView

Trả lời

1

tôi không có quá nhiều kinh nghiệm với UIScrollView s, nhưng nhìn vào các tài liệu, có vẻ như bạn có thể đặt maximumZoomScale, minimumZoomScale, và scrollEnabled để vô hiệu hóa tất cả mọi thứ bạn muốn vô hiệu hóa.

Dưới đây là các tài liệu: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html

Từ các tài liệu:

scrollEnabled:

Nếu giá trị của thuộc tính này là CÓ, di chuyển được kích hoạt, và nếu nó là NO , việc di chuyển bị tắt. Mặc định là CÓ.

Khi di chuyển bị vô hiệu hóa, màn hình cuộn không chấp nhận các sự kiện chạm; nó chuyển tiếp chúng lên chuỗi phản hồi.

maximumZoomScale:

Giá trị này xác định cách lớn nội dung có thể được thu nhỏ lại. Nó phải là lớn hơn tỷ lệ thu phóng tối thiểu để phóng to được bật. Giá trị mặc định là 1.0.

+0

tôi đã kết thúc việc khám phá này được thực hiện tốt nhất bởi subclassing scrollview, và thay thế các phương pháp đó gắn một cử chỉ Trình nhận dạng cho chế độ xem. Bằng cách chặn điều này, bạn có thể kiểm tra lớp của trình nhận dạng cử chỉ đang được đính kèm và chặn công cụ nhận dạng cử chỉ chụm và cử động. Đối với các mã tôi đã viết tôi muốn ngăn chặn các cử chỉ pinch và pan bình thường từ làm việc để chuyển hướng được độc quyền dưới sự kiểm soát có lập trình. Tôi đơn giản thiết lập các lớp con kế thừa để không bao giờ đính kèm nhận dạng cử chỉ và sau đó mã của tôi đã hành động trên các sự kiện cảm ứng nhận được bởi subview của scrollview. – Shinohara

+0

Xin chào, bạn có ví dụ về mã này không? Cảm ơn! –

7

Để ngăn chặn người dùng điều khiển phóng to và panning nhưng vẫn cho phép phóng to chương trình và panning của một scrollview, cách tiếp cận tốt nhất là để ghi đè phương pháp -addGestureRecognizer: của UIScrollView trong một lớp con. Trong sử dụng của tôi, tôi muốn chặn tất cả người nhận và kiểm soát các khu vực có thể xem hoàn toàn từ bộ điều khiển quan điểm của tôi, tôi đã làm như vậy như thế này:

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { 
    //Prevent any of the default panning and zooming controls from working 
    gestureRecognizer.enabled = NO; 
    [super addGestureRecognizer:gestureRecognizer]; 
} 

Mỗi recognizer cử chỉ đơn giản là người khuyết tật, để kiểm soát tốt hơn (cho phép điều khiển pan nhưng chỉ cho phép thu phóng thông qua một lần nhấn đúp), bạn chỉ cần kiểm tra trình nhận dạng cử chỉ đến qua số -isKindOfClass: và tắt khi thích hợp.

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { 
    //Prevent zooming but not panning 
    if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) { 
     gestureRecognizer.enabled = NO; 
    } 
    [super addGestureRecognizer:gestureRecognizer]; 
} 

tôi đã sử dụng phương pháp này trong một ứng dụng đọc truyện tranh có sử dụng hướng dẫn chuyển hướng để animate giữa tấm cắt trên một trang với đầy đủ trang bị chứa trong một UIScrollView.I suôn sẻ có thể phóng to trong và ngoài trên một khu vực được lựa chọn bởi chỉ cần đặt giới hạn chế độ xem cho vùng tôi muốn hiển thị.

+0

Làm cách nào để bạn biết rằng Apple sẽ luôn sử dụng UIPinchGestureRecognizer tại đây? đây không phải là một cách không chắc chắn để đạt được mục tiêu? –

9

Trên - (void)viewDidLoad; bạn sẽ có thể tắt bất kỳ trình nhận dạng cử chỉ nào bạn muốn.Trong trường hợp này:

UIPinchGestureRecognizer *pinchRecognizer = self.pinchGestureRecognizer; 
pinchRecognizer.enabled = NO; 

hoặc

UIPanGestureRecognizer *panRecognizer = self.scrollView.panGestureRecognizer; 
panRecognizer.enabled = NO; 

đôi khi tôi làm điều này từ quan điểm điều khiển có chứa UIScrollViews. Tôi chỉ nhắm mục tiêu chế độ xem cuộn (self.scrollView.pinchGestureRecognizer) và tạm thời tắt cử chỉ khi ứng dụng. đang ở trong một trạng thái nhất định.

+4

'UIPinchGestureRecognizer' dường như được bật trong nội bộ bằng cách đặt thang thu phóng. Vô hiệu hóa nó * sau khi * thiết lập chúng một cách có lập trình. –

4

Ghi chú nhanh ở đây. Có vẻ như 's panGestureRecognizerpinchGestureRecognizer đều được bật lần đầu tiên bộ điều khiển chế độ xem được thêm vào cửa sổ.

Về cơ bản, điều đó có nghĩa là đặt chúng thành enabled = NO trong viewDidLoad sẽ không hoạt động trong một số trường hợp. Tôi đã chuyển số enabled = NO của mình sang viewWillAppear: và nó bị kẹt. :)

1

Trong lớp con UIScrollView của bạn cũng ghi đè lên setZoomScale: Phương pháp tự động tái vô hiệu hóa các cử chỉ

- (void)setZoomScale:(CGFloat)zoomScale { 
    [super setZoomScale:zoomScale]; 
    self.pinchGestureRecognizer.enabled = NO; 
} 
Các vấn đề liên quan