2016-09-29 15 views
9

Làm cách nào để phát hiện xung đột xảy ra trên chảo của UIDynamicItem?UIKit pan hành vi năng động với tập tin đính kèm không tiếp tục hành vi va chạm?

Bối cảnh: Tôi tạo 20 nhãn ngẫu nhiên từ bộ màu/chuỗi (phần này không cần thiết cho câu hỏi), sau đó thêm chúng vào chế độ xem chính với vị trí trung tâm ngẫu nhiên. Từ đó, tôi thêm UIDynamicBehavior s, như sau:

1) UIDynamicItemBehavior để ngăn chặn các nhãn từ xoay 2) UISnapBehavior để đính nhãn để trung tâm của view (Tôi muốn có một phong trào trọng lực giống như, nhưng một lần nữa, đó không phải là câu hỏi này) 3) UICollisionBehavior cho tất cả các nhãn nơi collisionMode.Items.

Điều này hoạt động trong thiết lập "ban đầu" ... tất cả các nhãn xuất hiện tại các điểm ngẫu nhiên và sau đó nhanh chóng chụp cùng nhau ở giữa, với phát hiện va chạm thích hợp. Câu hỏi của tôi là, tuy nhiên, làm thế nào tôi có thể sau đó di chuyển một nhãn (thông qua một cử chỉ pan) để phát hiện va chạm tiếp tục?

Tôi đã thiết lập UIPanGestureRecognizer trên mỗi nhãn và khi bắt đầu kéo, tôi tạo UIAttachmentBehavior và sử dụng để di chuyển chúng khi tôi kéo. Điều này "hoạt động" theo nghĩa là nhãn di chuyển, nhưng nó sẽ chỉ lướt qua tất cả các nhãn khác mà không có bất kỳ phát hiện va chạm nào xảy ra. Làm thế nào tôi có thể đạt được phát hiện va chạm này, vì vậy khi tôi bắt đầu kéo một nhãn tới những người khác, chúng di chuyển ra khỏi đường đủ để không có sự chồng chéo (và sau đó chúng quay lại vị trí của chúng dựa trên điểm trọng tâm) ? Tôi có cần đính kèm một UIAttachmentBehavior vào tất cả các nhãn khác với nhãn tôi đang kéo cho mỗi pan không?

tôi đã tạo ra một dự án thử nghiệm cho vấn đề tôi phải đối mặt, trong đó cho thấy tắt những gì tôi vừa mô tả:

github test project

Cảm ơn!

Trả lời

0

Vâng, sau vài tháng cân nhắc vấn đề này, cuối cùng tôi đã nghĩ ra giải pháp nên tôi nghĩ tôi sẽ đăng nó ở đây vì lợi ích của mọi người sau này.

Điều này cực kỳ dễ thực hiện với cảnh SpriteKit đơn giản. Tôi chỉ tạo một SKScene nhỏ, thêm SKLabelNode vào cảnh đó với bất kỳ văn bản/màu/kích thước nào tôi muốn và sau đó thêm SKFieldNode với radialGravityField. Từ đó, các thuộc tính vật lý có thể chơi được thông qua thuộc tính physicsBody của mỗi nút và tôi có thể thực hiện chính xác những gì mong muốn bằng cách cắm vào phương thức touchesBegan của cảnh và di chuyển nút phù hợp một cách thích hợp, với công cụ vật lý xử lý va chạm và nảy tôi.

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