2010-03-21 38 views
5

Đây là một vấn đề về iPhone phức tạp mà tôi đã thực hiện. Tôi có ba UIScrollViews trên một trang, một trong đó chỉ cuộn theo chiều ngang, một trong đó chỉ cuộn theo chiều dọc, và một mà cuộn cả chiều ngang và theo chiều dọc. Tôi muốn khóa các khung nhìn với nhau, để vị trí nằm ngang của scrollview ngang chỉ phù hợp với vị trí nằm ngang của scrollview chính, và scrollview dọc tương tự như vậy, để kéo scrollview chính xung quanh điều khiển scrollviews ngang và dọc.Kết nối hai thiết bị UIScrollView với nhau

Vấn đề là, tôi hoàn toàn bối rối. Tôi đã nhìn xung quanh bên trong tài liệu hướng dẫn táo, nhưng dường như không có cách nào để làm điều này một cách chính thức. Một ý nghĩ rằng tôi đã có bằng cách nào đó "sao chép" bất kỳ liên lạc trên bất kỳ scrollviews đến một điểm trên hai khác, nhưng tôi không có ý tưởng làm thế nào để làm điều này. Nếu bất cứ ai có bất kỳ suy nghĩ về điều này, tôi rất nhiều sẽ đánh giá cao nó.

Chỉnh sửa: Tôi đã thử đề xuất về phân lớp UIScrollView và ghi đè trọng sốĐược yêu thích để gọi chạm vào Được yêu thích trên các chế độ xem cuộn khác. Thật không may, touchesMoved không nhận được gọi cho chuyển động di chuyển như UIScrollView chặn các chuyển động bằng cách nào đó và sử dụng chúng để kiểm soát di chuyển của nó. Tôi bắt đầu tìm kiếm các công cụ cấp thấp hơn và tìm thấy các lớp cuộn hoạt hình lõi, nhưng lý tưởng là tôi không muốn tạo lại UIScrollView từ đầu. Vẫn cố gắng tìm ra cái này.

Trả lời

11

Tôi nghĩ rằng cách đơn giản nhất sẽ có thêm một đại biểu để scrollviews của bạn mà thực hiện các phương pháp sau đây:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

Sau đó, bạn có thể kiểm tra contentOffset để kiểm tra số lượng scrollview đã thực sự cuộn và cập nhật scrollview chính cho phù hợp.

+0

Tuyệt vời, công trình này hoàn hảo. Bây giờ tôi cảm thấy hơi ngớ ngẩn, nhưng cảm ơn vì đã đặt tôi thẳng. – johnw188

+0

Tôi choáng váng về mức độ hoạt động của nó. Tôi đã nghĩ về nó, nhưng dự kiến ​​sẽ bị trả lại vv để không được phản ánh và nó trông icky. Thật hoàn hảo. Cảm ơn Martin! –

0

Bạn cần mở rộng UIScrollView cho cả ba lần sử dụng trên màn hình của bạn và ghi đè chạm vàoMoved: withEvent: phương thức gọi cho những người khác (đảm bảo rằng bạn không kết thúc bằng mã tròn kết thúc tự gọi lại!).

Vì vậy, ví dụ mã trong hai chiều di chuyển mục có thể dựa vào điều này:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [horizontalScrollview touchesMoved:touches withEvent:event]; 
    [verticalScrollview touchesMoved:touches withEvent:event]; 
} 

bằng cách sử dụng một số biến bổ sung (ví dụ ControllerLastTouched), bạn có thể kiểm tra trước khi gọi hai touchesMoved khác: withEvent: phương thức.

này sẽ cho phép bạn để làm "nhân bản" bạn đang nói về ...

+0

Xin chào, vì vậy tôi nghĩ đây là những gì tôi đang tìm kiếm nhưng hóa ra mọi thứ phức tạp hơn một chút so với tôi nghĩ. Khi tôi thiết lập sự sắp xếp này, bất kỳ chạm nào vào khung nhìn chứa trong UIScrollView đều được chọn, nhưng chuyển động của chúng không được gọi là chạm. Tôi khá chắc chắn điều này là do cách UIScrollView hoạt động - họ bắt đầu hẹn giờ khi chạm ngón tay và nếu người đó cuộn trong một khoảng thời gian nhất định, nó sẽ bắt đầu chuyển động cuộn, nếu không nó sẽ chạm vào các phương pháp xử lý cảm ứng của chế độ xem. – johnw188

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