2009-04-24 24 views
5

Tôi muốn tạo lại hành vi flick-to-scroll của UIScrollView, nhưng tôi không muốn sử dụng (hoặc không thể sử dụng) lớp đó. Tôi có thể làm gì?Làm thế nào tôi có thể tạo lại hành vi flick-to-scroll của iPhone UIScrollView trong chế độ xem tùy chỉnh của riêng tôi?

+0

Lưu ý: Câu hỏi liên quan đến chế độ xem OpenGL – Thanks

+0

Đúng, trong trường hợp _my_ tôi đã suy nghĩ về chế độ xem OpenGL. Tuy nhiên, hãy xem câu trả lời của tôi cho Roger Nolan bên dưới - Tôi nghĩ có rất nhiều trường hợp không phải là OGL thú vị. –

Trả lời

8

OK, tôi đã trả lời điều này bằng cách triển khai thư viện của riêng tôi để ghi lại động lực của UIScrollView.

Điều gì hữu ích về mã của tôi là mã độc lập với hệ tọa độ, tỷ lệ hoạt ảnh và các lớp giao diện người dùng cụ thể mà bạn đang sử dụng. Nó có thể dễ dàng được lồng trong một lớp xem tùy chỉnh mà bạn chọn.

Hành vi flick-to-scroll mặc định của iPhone thật thú vị. Nếu bạn giữ ngón tay của mình trong một thời gian dài và di chuyển nó theo nhiều hướng khác nhau, bạn sẽ thấy chỉ có hướng cuối cùng được sử dụng để tính toán chuyển động cuộn.

Nếu bạn tự mình xây dựng mã này, bạn sẽ nhanh chóng phát hiện ra rằng chỉ cần sử dụng hai điểm cuối để tính toán hướng chuyển động sẽ không cắt nó. Thay vào đó, mã của tôi giữ một lịch sử ngắn của các chạm và sử dụng nội suy tuyến tính để xác định nơi chạm "đã có được" một số lượng nhỏ thời gian trước đây. Điểm nội suy này được sử dụng làm cơ sở để tính toán vector chuyển động. Điều này dẫn đến một tương tác rất dễ chịu.

Mã có sẵn trên github, tại đây: http://gist.github.com/100855. Nó được phát hành theo giấy phép BSD.

+0

Bạn đã trả lời câu hỏi của riêng bạn - với một số mã có liên quan đến khá đẹp - trong vòng 2 phút sau khi hỏi? Đó là mã thú vị nên OK! –

+0

Vâng tôi không biết nếu đó là kosher cho Stack tràn nhưng kể từ khi tôi phát hiện ra tôi không phải là người duy nhất tìm kiếm nó, tôi figured nó sẽ là hữu ích? Có diễn đàn tốt hơn không? –

0

Vì vậy, những gì về UIScrollView đã không làm việc cho bạn? lớp đó là khá linh hoạt ...

+0

Tôi có chế độ xem OpenGL cho trò chơi và tôi muốn có thể điều khiển chế độ xem theo cách tương tự như của UIScrollView ... –

0

Dave, tôi thấy bạn đã thưa: câu hỏi của riêng bạn với một số mã nhưng, không thiết lập sau đây cung cấp cho bạn những gì bạn cần:

myScrollView.bounces = YES; 
myScrollView.pagingEnabled = YES; 
myScrollView.directionalLockEnabled = YES; 

Cụ thể, nó có vẻ như bạn đã thực hiện lại directionLockEnabled. Có thể hiểu tại sao bạn không thể sử dụng UIScrollView là vấn đề thú vị hơn :-)

+0

Xem nhận xét của tôi ở trên. Tôi đang cố gắng tái tạo hành vi trong một bối cảnh mà UIScrollView không thể đi (hoặc, ít nhất, không nên đi.) –

+0

(Và: tôi nên chỉ ra rằng những gì tôi đã làm là không giống như chỉ cần thiết lập một vài thuộc tính Nếu đó là những gì tôi cần phải làm - tốt, tôi đã làm như vậy. :-) –

+0

... và tôi quan tâm đó là gì ;-) –

0

Điều này thật tuyệt! Tôi đã sử dụng nó trong một ứng dụng, nơi view scrollable của tôi là giá trị dữ liệu đồ họa trong một ngày trong khoảng từ 1902-2037, vì vậy UIScrollView sẽ không hiệu quả.