Создание ограничивающей рамки для UIImageView

Как можно создать ограничивающую рамку для UIImageView, который не является CGRect?

Я хотел бы иметь объекты в моем представлении, которые должны отображать изображения, а также обнаруживать столкновения.

Проблема в том, что я хотел бы, чтобы эти объекты были любой формы, а не помещали их в CGRect и обнаруживали столкновения в областях, которые находятся внутри коробки, но не являются реальным изображением.

Как этого добиться?


person some_id    schedule 13.03.2011    source источник
comment
Это для игры? Если это так, рассмотрите Cocos2D   -  person amattn    schedule 14.03.2011


Ответы (1)


Это нетривиальная проблема. Но в основе лежит то, что CGRect представляет собой прямоугольник, а проверку попаданий внутри прямоугольника довольно легко понять. Однако вы говорите, что хотите более сложную форму. UIImageView отображает изображение. У него нет никакого представления о том, какую форму вы хотите использовать для теста на столкновение. Так что вам придется рассказать об этом.

Проще всего посмотреть на значения альфа/прозрачности отображаемого изображения, чтобы создать фигуру. Таким образом, чтобы ответить на вопрос, является ли точка ударом по изображению, мы определяем местоположение точки на изображении и возвращаем true, если альфа больше 0. Если вы сделаете это, вы можете создать любое изображение с прозрачным фоном, и код просто работай.

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

Как определить, находится ли 2D-точка внутри многоугольника?

person madmik3    schedule 13.03.2011
comment
Шикарная и умная идея. Спасибо за это. Он должен работать идеально. Это правильно определяет альфу в самом ImageView, а не альфу представления за этим проверенным? - person some_id; 14.03.2011
comment
да должно работать. здесь показано, как получить данные из UIImage stackoverflow.com/questions/448125/ - person madmik3; 14.03.2011
comment
Есть ли в obj-c метод, аналогичный java PixelGrabber getPixel()? - person some_id; 14.03.2011