Kịch bản:Làm cách nào để kiểm tra xem người dùng có chạm vào một CGPath không?
Tôi có một bộ CGPath
s. Chúng chủ yếu là các đường thẳng (nghĩa là các hình dạng không đóng). Chúng được vẽ trên màn hình theo phương pháp vẽ của UIView
.
Làm cách nào để kiểm tra xem người dùng có chạm vào một trong các đường dẫn không?
Dưới đây là những gì tôi đã làm việc:
UIGraphincsBeginImageContext(CGPathGetBoundingBox(path));
CGContextRef g = UIGraphicsGetCurrentContext();
CGContextAddPath(g,path);
CGContextSetLineWidth(g,15);
CGContextReplacePathWithStrokedPath(g);
CGPath clickArea = CGContextCopyPath(g); //Not documented
UIGraphicsEndImageContext();
Vì vậy, những gì tôi đang làm là tạo ra một bối cảnh hình ảnh, bởi vì nó có chức năng tôi cần. Sau đó tôi thêm đường dẫn đến ngữ cảnh và thiết lập chiều rộng của đường là 15. Stroking đường dẫn tại điểm này sẽ tạo vùng nhấp mà tôi có thể kiểm tra bên trong để tìm các lần nhấp. Vì vậy, tôi nhận được rằng con đường vuốt ve bằng cách nói cho bối cảnh để biến con đường thành một con đường vuốt ve, sau đó sao chép đường dẫn đó trở lại vào một CGPath khác. Sau đó, tôi có thể kiểm tra:
if (CGPathContainsPoint(clickArea,NULL,point,NO)) { ...
Tất cả đều hoạt động tốt và tốt, nhưng CGContextCopyPath
, là không có giấy tờ, dường như là một ý tưởng tồi để sử dụng vì lý do rõ ràng. Ngoài ra còn có một kludginess nhất định về việc thực hiện một CGContext
chỉ cho mục đích này.
Vì vậy, không ai có bất kỳ ý tưởng nào? Làm cách nào để kiểm tra xem người dùng đã nhấn gần (trong trường hợp này, trong vòng 15 pixel) của bất kỳ khu vực nào trên CGPath
?
Trong Swift 3.0: 'path.copy (strokingWithWidth: CGFloat…)' – buildsucceeded