Transform.Translation задачи по ротации - PullRequest
1 голос
/ 18 июня 2010

Я использую следующее для масштабирования и изменения положения слоя UIView, когда устройство поворачивается в горизонтальную плоскость.

 [containerView.layer setValue:[NSNumber numberWithFloat: 0] forKeyPath: @"transform.translation.x"];
 [containerView.layer setValue:[NSNumber numberWithFloat: 0] forKeyPath: @"transform.translation.y"];    
 [containerView.layer setValue:[NSNumber numberWithFloat: 1] forKeyPath: @"transform.scale.x"]; //[NSNumber numberWithInt:1]
 [containerView.layer setValue:[NSNumber numberWithFloat: 1] forKeyPath: @"transform.scale.y"];

и затем следующее при повороте назад в портрет

 [containerView.layer setValue:[NSNumber numberWithFloat: -75] forKeyPath: @"transform.translation.x"];
 [containerView.layer setValue:[NSNumber numberWithFloat: 0] forKeyPath: @"transform.translation.y"];    
 [containerView.layer setValue:[NSNumber numberWithFloat: .7] forKeyPath: @"transform.scale.x"]; //[NSNumber numberWithInt:1]
 [containerView.layer setValue:[NSNumber numberWithFloat: .7] forKeyPath: @"transform.scale.y"];

Проблема в том, что после поворота назад в портретное положение слой «перемещается», то есть смещение по x, y постепенно изменяется (увеличение x, уменьшение y). Масштаб выглядит нормально (т.е. не увеличивается, уменьшается при повторных поворотах)

Кто-нибудь может предложить правильное решение?

1 Ответ

0 голосов
/ 18 июня 2010

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

РЕДАКТИРОВАТЬ: попробуйте сделать что-то вроде использования меньшего перевода х в преобразовании назад или использованияположительный x перевод и ненулевой y перевод.

Фактически, если переводимая сумма остается неизменной каждый раз, то это, вероятно, связано с переводами, которые вы ей даете.Во-первых, вы можете компенсировать все, что требовалось для перевода, что может стать источником проблемы.

...