I found a similar question about getting just the rotation, but as I understand scaling and rotating work different in the transform matrix.
Matrixes are not my strength
Let me propose different solution. I first rotate the affine transform in the opposite direction and just read scale from t.a and t.d:
- (CGPoint)scaleFromTransform {
CGAffineTransform t = self.transform;
CGFloat angle = atan2(t.b, t.a);
// calculate rotation transform (by -angle)
CGAffineTransform r = CGAffineTransformMakeRotation(-angle);
// calculate main transform without rotation
CGAffineTransform t0 = CGAffineTransformConcat(t, r);
CGFloat xScale = t0.a;
CGFloat yScale = t0.d;
return CGPointMake(xScale, yScale);
}