I have an app that saves object transformation (matrix value is saved) and then reloads it. When using constrained rotation (holding the shift key down) I'm getting different results than with regular rotation. Example:
Given we have selected a TextField that starts with an identity matrix (a=1, b=0, c=0, d=1, tx=0, ty=0) and constrained rotated it 180 degrees the matrix should be (a=-1, b=0, c=0, d=-1, tx=0, ty=0) but instead ends up as something like (a=-1, b=4.996003610813204e-16, c=-4.996003610813204e-16, d=-1, tx=156.6, ty=74.95).
If you do the same rotation without holding shift and get as close as possible to 180 degrees you get an expected result with the correct scale e.g. (a=-0.9999896287918091, b=0.004538288805633783, c=-0.004538288805633783, d=-0.9999896287918091, tx=156.7, ty=74.65)
The object is not affected before the user saves (it rotates 180 degrees and is not scaled) but when the object is loaded from a saved matrix the scale values cause it to be too big, in this case 4.99 times too big.