Как выполнить составное преобразование rotate flip?

#ios #core-graphics #cgaffinetransform

#iOS #ядро-графика #cgaffinetransform

Вопрос:

Я пытаюсь выяснить, как сделать UIProgressView заливку справа налево со все более высокими progress значениями. Я подумал, что если я просто поверну компонент, все будет хорошо, однако теперь затенение отображается вверх ногами. Как мне добавить преобразование «перевернуть по вертикали» для выполнения задачи?

Обратите внимание, проблема с затенением затрагивает <iOS 7.

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

 CGAffineTransform rotateTransform = CGAffineTransformMakeRotation(M_PI); // rotate 180 degrees (but now it's upside down)
CGAffineTransform flipTransform = CGAffineTransformMake(0, 0, 0, 1, 0, 0); // flip 90 degrees to bring it the right way up
myProgressView.transform = CGAffineTransformConcat(rotateTransform, flipTransform);
 

ПРИМЕЧАНИЕ:
Я ничего не пытаюсь анимировать

ОБНОВЛЕНИЕ: вместо того, чтобы пытаться вычислить два преобразования для достижения этого (т. Е. Один поворот на 180 градусов инвертирование по вертикали на 180 градусов), только одно горизонтальное инвертирование на 180 градусов должно достичь того же.

Ответ №1:

Небольшой обходной маневр, но это делает свое дело…

CATransform3DGetAffineTransform(CATransform3DMakeRotation(M_PI, 0, 1, 0));

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

Выход из преобразования

NSLog(@"%@",[NSValue valueWithCGAffineTransform:self.progress.transform]);

дает

CGAffineTransform — преобразование: {{-0.99999982, 0, 0, 1}, {0, 0}}

и показывает отсутствующее a значение -1.0 при вашей попытке создать преобразование.

Комментарии:

1. Это тот самый! Я просто жестко запрограммировал это следующим образом: myProgressView.transform = CGAffineTransformMake(-1, 0, 0, 1, 0, 0);