2015-01-14 3 views
0

У меня есть два UIBezierPaths, один вход пользователя, который следует за их касаниями, и другой, который предварительно сделан. Я хочу, чтобы проверить, действительно ли UIBezierPath пользователя , покрывающий предварительно сделанный.Обнаружить, если UIBezierPath видна

Я действительно не знаю, как это сделать, поэтому я хотел посмотреть, есть ли у кого-нибудь идеи о том, как я могу это сделать.

ответ

0

Я думаю, что есть два способа:

  1. Проверить связанные обеих кривых Безье. Если границы не совпадают, то он уверен, что полного покрытия нет. В случае совпадений нет гарантии, что он полностью закрыт.
  2. Хит-тестирование нескольких случайно выбранных точек. Это не детерминированность.
1

Этот трудный, потому что границы 1 пути могут полностью охватывать границы другого пути, но на самом деле не покрывают его содержимое, например: граница голубого пути (зеленая) больше границы черного пути, фактически не полностью закрывает его.

overlapping paths

Один из способов полностью проверить, хотя это не было бы очень быстро: 1. создать новый графический контекст и заполнить фон с белым 2. заполняющего путем, который вы хотите быть заключены в черном 3. заполните путь, который вы хотите сделать, охватывая (рисованный путь пользователя) с белым 4. проверьте наличие любых черных пикселей.

Делать это будет оставить четыре угла квадрата, заполненного черным цветом, так что вы можете обнаружить, что, когда вы проверяете эти пиксели

Шаг 4 займет второе или два. вы можете ускорить его, проверяя каждый второй или четвертый пиксель или что-то в этом роде, или уменьшая размер создаваемого вами контекста.

До тех пор, пока вы делаете это только после того, как пользователь полностью закончит свой путь, вы, вероятно, сможете получить производительность достаточно быстро, но при этом во время рисования будет очень хорошо.

Смежные вопросы