CGAffineTransformMakeRotation масштабирует изображение - PullRequest
2 голосов
/ 05 марта 2012

Я реализую базовый спидометр, используя изображение и поворачивая его. Однако, когда я устанавливаю начальное вращение (примерно на 240 градусов, преобразованное в радианы), оно поворачивает изображение и делает его намного меньше, чем могло бы быть. Некоторые значения делают изображение полностью исчезающим. (как M_PI_4)

ползунок идет от 0-360 для тестирования.

следующий код вызывается для viewDidLoad и при изменении значения ползунка.

-(void) updatePointer
{
    double progress = testSlider.value;
    progress += pointerStart
    CGAffineTransform rotate = CGAffineTransformMakeRotation((progress*M_PI)/180);
    [pointerImageView setTransform:rotate];
}

РЕДАКТИРОВАТЬ: Вероятно, важно отметить, что, как только он будет установлен в первый раз, масштаб остается прежним. Итак, если бы я установил pointerStart на 240, он бы уменьшился, но перемещение ползунка не изменило бы масштаб (и повернуло бы его, как вы подозревали) , (сжимает это.)

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Мне удалось решить эту проблему для любого, кто сталкивается с этим вопросом.Очевидно, что при вызове viewDidLoad изображение загружается не полностью, поэтому матрица преобразует, что cgAffineTransform фактически изменяет размер изображения.Перемещение кода обновления в viewDidAppear устранило проблему.

0 голосов
/ 05 марта 2012

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

CGAffineTransform  trans = pointerImageView.transform;

pointerImageView.transform = CGAffineTransformRotate(trans, 240);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...