Сохранение исходной ориентации вида при переходе в преобразованный вид

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

На рисунке 1 у меня есть UIView с именем parentView1 (это представление серого цвета). У него есть подвиды (4 на картинке).

До того, как я применил CGAffineTransformRotate к parentView1, я могу перетащить представление (красная вертикаль) в parentView1, и результат будет таким, как на картинке 2.

Однако, если я сначала сделаю CGAffineTransformRotate (см. код) на parentView1, а затем перетащу, чтобы добавить красный вертикальный вид в parentView1, красный вертикальный вид также будет повернут к тому же, что и parentView1 (рисунок 3) сразу, как я удалил вертикальный вид. Я не хочу, чтобы это произошло. Мне нужно, чтобы красный вертикальный вид оставался в той же ориентации, что и оригинал, до того, как он был перетащен.

Тот же эффект происходит и наоборот: переместите подпредставление из parentView1 за пределы его границы, если parentView1 был повернут.

Любое предложение?

Код для поворота parentView1:

self.parentView1.transform = CGAffineTransformRotate(self.parentView1.transform, degreesToRadians(45));

Код для перемещения представления от родителя к другому:

-(void)getNewPosition2:(UIView *)viewToConvert parentView:(UIView *)parentViewx superParentView:(UIView *)superParentView
{
    CGPoint newPoint = [superParentView convertPoint:viewToConvert.center fromView:parentViewx];
//    viewToConvert.layer.position = newPoint;
    viewToConvert.center = newPoint;
    [viewToConvert removeFromSuperview];
    [superParentView addSubview:viewToConvert];
}

Вызов метода getNewPosition2 выше:

[self getNewPosition2:recognizer.view parentView:self.view superParentView:self.parentView1];

person user523234    schedule 29.05.2012    source источник


Ответы (1)


Я нашел решение, используя матрицу преобразования parentView1 для вычисления угла для обоих случаев: перемещение объекта в и из parentView1.

Для перемещения объекта в parentView1:

float angle = (2 * M_PI) - atanf(self.parentView1.transform.b / self.parentView1.transform.a );
viewToConvert.transform = CGAffineTransformRotate(viewToConvert.transform, angle);

Для перемещения объекта из parentView1:

float angle = atanf(self.parentView1.transform.b / self.parentView1.transform.a);
viewToConvert.transform = CGAffineTransformRotate(viewToConvert.transform, angle);
person user523234    schedule 30.05.2012