UIImageView координата к координатам подпредставления - PullRequest
2 голосов
/ 16 февраля 2011

Если я начну с UIImageView и добавлю подпредставление, как мне перевести координату в исходном UIImageView в соответствующую координату (то же место на экране) в подпредставлении?

Ответы [ 3 ]

6 голосов
/ 16 февраля 2011

UIView предоставляет методы именно для этой цели. В вашем случае у вас есть два варианта:

CGPoint newLocation = [imageView convertPoint:thePoint toView:subview];

или

CGPoint newLocation = [subview convertPoint:thePoint fromView:imageView];

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

0 голосов
/ 16 февраля 2011

Начиная с кода вроде:

UIImageView* superView=....;
UIImageView subView=[
    [UIImageView alloc]initWithFrame:CGRectMake(0,0,subViewWidth,subViewHeight)
];
subView.center=CGPointMake(subViewCenterX, subViewCenterY);
[superView addSubview:subView];

Координата (subViewCenterX, subViewCenterY) - это точка в superView, где центр subView "закреплен". Подвид можно перемещать относительно суперпредставления, перемещая его центр вокруг. Мы можем пойти, например,

subView.center=CGPointMake(subViewCenterX+1, subViewCenterY);

чтобы переместить его на 1 пункт вправо. Теперь предположим, что у нас есть точка (X,Y) в суперпросмотре, и мы хотим найти соответствующую точку (x,y) в подпросмотре, чтобы (X,Y) и (x,y) ссылались на одну и ту же точку на экране. Формула для х:

x=X+subViewWidth/2-subViewCenterX;

и аналогично для y:

y=Y+subViewHeight/2-subViewCenterY;

Чтобы объяснить это, если вы рисуете прямоугольник, представляющий superView, и другой (больший) прямоугольник, представляющий subView, разница subViewWidth/2-subViewCenterX равна «ширине бита блока subView, торчащего слева от superView. «

0 голосов
/ 16 февраля 2011

Вычтите frame.origin подпредставления из точки в представлении родителей в ту же точку в координате подпредставления:

subviewX = parentX - subview.frame.origin.x;

subviewY = parentY - subview.frame.origin.y;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...