2009-06-13 36 views
7

Tôi đang cố gắng phân biệt giữa hai (hoặc nhiều) đối tượng UITouch trên iPhone. Cụ thể, tôi muốn biết thứ tự xảy ra.Phân biệt giữa các đối tượng UITouch trên iPhone

Ví dụ, trong tài liệu của tôiBộ đệm: phương thức withEvent: Tôi nhận được một NSSet đối tượng UITouch. Bây giờ tôi có thể tìm ra có bao nhiêu chạm, nhưng, đối tượng nào đại diện cho ngón tay nào?

Tôi nhận thấy thuộc tính dấu thời gian trên UITouch - đây có phải là những gì tôi đang tìm kiếm không? Tôi thấy điều đó sẽ hữu ích như thế nào để có được cảm giác cuối cùng hoặc lần đầu tiên - việc cung cấp các chạm không biến đổi ...

Có vấn đề của tôi. Tôi có thể sử dụng dấu thời gian để chỉ ra các liên lạc mới nhất, nhưng sau đó liên lạc đã xảy ra di chuyển đầu tiên, và nó trở thành ... Điện thoại

Ở cuối bài tập này, tôi muốn có thể thực hiện cử chỉ "chụm" để phóng to hoặc thu nhỏ, v.v.

Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.

Trả lời

3

tôi đã có một số mẫu liên lạc mã ở đây:

http://github.com/kailoa/6tringle-touchsamplecode/tree/master http://6tringle.com/blog/2009/TouchSampleCode.html

Đó là hữu ích cho một số người, và tôi nghĩ rằng nó có thể giúp bạn ra ngoài.

Hãy xem qua số NSMutableArray *ActiveTouches. Đó là bộ sưu tập tôi sử dụng để theo dõi thứ tự mà các lần chạm xảy ra.

Có một ví dụ về chụm và kéo căng trong mã đó dựa vào việc sử dụng mảng đó.

+0

Cảm ơn, tôi sẽ xem xét khi tôi có thời gian. – Jasarien

+0

Mảng activeTouches khác với những gì hệ thống giữ cho bạn trong [event touchesForView: self]? –

2

Giải pháp thường được thảo luận là để xem các sự kiện và so sánh các giá trị x và y và x và y hiện tại để khớp chúng. Dường như có một số thủ đoạn. Sự kiện có thể không đúng thứ tự và tôi đã thấy các trường hợp có vẻ như phần cứng hoặc hệ điều hành bị nhầm lẫn với nhiều (10) ngón tay di chuyển.

Một vài người đã chỉ ra rằng các sự kiện chạm được sử dụng lại và bạn có thể sử dụng thực tế đó để theo dõi ngón tay nào. Điều này đã được bảo hiểm ít nhất một lần trên StackOverflow, tôi tin.

23

Mỗi ngón tay bị một đối tượng UITouch, và cùng đối tượng được trao cho bạn một lần nữa và một lần nữa . Chỉ cần nhớ các con trỏ để thiết lập các đối tượng UITouch ban đầu và thực hiện so sánh con trỏ để theo dõi các ngón tay.

Từ tài liệu tham khảo của Apple:

Một đối tượng liên lạc là dai dẳng cho một ngón tay đưa ra trong một chuỗi, và UIKit đột biến nó như là nó theo dõi ngón tay suốt nó. Các thuộc tính cảm ứng thay đổi là giai đoạn của cảm ứng, vị trí của nó trong chế độ xem, vị trí trước đó của nó và dấu thời gian của nó. Mã xử lý sự kiện đánh giá các thuộc tính này để xác định cách phản hồi sự kiện.

+0

Tài liệu liên quan hiện có tại đây http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html#//apple_ref/doc/uid/TP40009541-CH3-SW14 (nếu URL này bị hỏng, hãy xem trong 'Hướng dẫn xử lý sự kiện cho iOS' trong 'Sự kiện đa cảm ứng - Xử lý sự kiện đa cảm ứng - Xử lý chuỗi đa nhiệm phức tạp') – Piku

2

Tôi đã xem mã Kailoa Kadano. Bạn về cơ bản giữ một NSMutableArray của các đối tượng UITouch hiện tại. Tuy nhiên tài liệu của UITouch nêu rõ điều này:

Đối tượng UITouch là liên tục trong suốt chuỗi đa chạm. Bạn không bao giờ nên giữ lại đối tượng UITouch khi xử lý sự kiện. Nếu bạn cần lưu giữ thông tin về một lần chạm từ một pha khác, bạn nên sao chép thông tin đó từ đối tượng UITouch .

Tôi không thấy lý do không giữ lại nếu bạn phát hành lại khi sự kiện kết thúc nhưng đó là những gì mà tài liệu SDK nói.

2

Tôi đang tìm kiếm thông tin tương tự. Và có nó xuất hiện bạn không giả sử để giữ lại dữ liệu UITouch. Theo phần "Xử lý chuỗi liên lạc đa chạm liên tục" của số Apple Developer Documentation, cách "thích hợp" để theo dõi nhiều lần chạm là giá trị con trỏ của sự kiện UITouch.

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