Если вы просто хотите обратить вспять эффекты предыдущего преобразования, вам может потребоваться установить для свойства shape.transform значение CGAffineTransformIdentity.
Когда вы устанавливаете свойство преобразования представления, вы заменяете любое существующее преобразование, которое оно имеет, не добавляя к нему. Поэтому, если вы назначите преобразование, вызывающее вращение, оно забудет о любом ранее настроенном отражении.
Если вы хотите добавить дополнительную операцию поворота или масштабирования к ранее преобразованному виду, вам следует изучить функции, позволяющие указать существующее преобразование.
т.е. вместо использования
shape.transform = CGAffineTransformMakeRotation(M_PI);
, который заменяет существующее преобразование указанным вращением, вы можете использовать
shape.transform = CGAffineTransformRotate(shape.transform, M_PI);
это применяет вращение к существующему преобразованию (что бы это ни было) и затем назначает его представлению. Взгляните на документацию Apple по CGAffineTransformRotate , она может немного прояснить ситуацию.
Кстати, в документации сказано: «Если вы не планируете повторно использовать аффинное преобразование, вы можете использовать CGContextScaleCTM, CGContextRotateCTM, CGContextTranslateCTM или CGContextConcatCTM.»