2012-03-25 2 views
1

У меня есть изображение, которое разрешено поворачивать и масштабировать пользователем. Каждый раз, когда пользователь щелкает изображение, я пытаюсь выяснить, прозрачна или нет.iphone - применить CGAffineTransformRotate on point in hittest

Если это прозрачно, я возвращаю null в HitTest моего представления, если он не прозрачен, я возвращаю представление. Проблемы начинаются, когда пользователь поворачивает изображение. В моем методе hitTest мне нужно преобразовать точку в соответствии с вращением текущего вида. В противном случае точка указывает на несоответствующее местоположение на представлении (и на изображении).

Как это сделать?

спасибо.

ответ

2

Это CGAffineTransform Reference может помочь:

CGPointApplyAffineTransform 

CGRectApplyAffineTransform 

и

CGSizeApplyAffineTransform 

Но прежде чем вы начинаете думать, что вам нужно выполнить отображение вручную, я хотел бы предложить, чтобы дать ему попробовать «, как если бы 'текущее преобразование было CGAffineIdentity и соответствующим образом определяло ваше определение координат. Вы можете быть удивлены результатами ...

Мой собственный опыт говорит о том, что он выглядит, когда вы получаете очки от UITouch locationIn_SomeView_ перевернутая матрица SomeView применяется к точке, прежде чем он будет передан обратно к вам.

Таким образом, вам, вероятно, не нужен какой-либо из CGxxxApplyAffineTransform, если вы не создадите точки самостоятельно, вне системы событий.

+0

Отлично, спасибо! На самом деле, мне дали систему координат uiview. Но поскольку я проверяю цвет определенного пикселя на изображении, кажется, этого недостаточно. – vondip

+1

В моем случае это так. У меня есть не прямоугольное изображение (округленный треугольник) с полностью прозрачными пикселями повсюду, но внутри самого треугольника. И я хотел, чтобы мое сенсорное обнаружение не срабатывало на «прозрачных» пикселях. Поэтому я сделал то, что вы говорите, то есть: я получаю координату пикселя изображения *, чьи прямоугольные границы * выровнены с границами представлений. Если мы игнорируем «масштабный коэффициент сетчатки» на минуту, любая точка в пределах границ обзора отображается непосредственно в пиксель изображения. ДАЖЕ, КОГДА ПРОСМОТРЕН ВРАЩАЕТСЯ – verec

+0

На самом деле вы правы! Я просто попробовал. Вы говорите, что это может не работать в режиме ratina? – vondip