如果这显而易见或者已经在其他地方讨论过,我很抱歉,但我已经搜索了一整天,还没有找到实际可行的解决方案。
我的问题如下:我目前正在全屏UIView中绘制一个图像。比如说,该图像位于UIView的右下角。我想在该图像的中心进行旋转变换(CGAffineTransformMakeRotation),但默认情况下,旋转命令会围绕UIView本身的中心旋转。结果,当我旋转时,我的图像在屏幕上移动,而不是停留在原地并围绕其自身中心旋转。
据我所知,我需要通过平移我的上下文,使原点(UIView的中心)位于我的图像的中心,然后旋转,并通过将其翻译回原始位置来恢复上下文。
以下是我得到的最接近可行方案,但问题在于,当图像旋转时,它会向下移动。我认为这是由于动画补间第一步翻译和第三步翻译之间的动画补间引起的,而不是意识到翻译的开始点和结束点将是相同的...
// Before this i'd make a call to a function that draws a path to a passed in context
CGAffineTransform inverseTranslation = CGAffineTransformMakeTranslation( transX, transY );
CGAffineTransform translation = CGAffineTransformMakeTranslation( -transX, -transY );
CGAffineTransform rot = CGAffineTransformMakeRotation( 3.14 );
CGAffineTransform final = CGAffineTransformConcat( CGAffineTransformConcat( inverseTranslation, rot ), translation );
// Then i apply the transformation animation like normal using self.transform = final etc etc
我也尝试了CGContextTranslateCTM和CGContextSaveGState/UIGraphicsPushContext等方法,但它们似乎没有什么效果。
我已经为此奋斗了几天,我的当前解决方案似乎很接近,但我不知道如何摆脱那个翻译缓动。有人有解决这个问题的方法或更好的方法吗?
[更新] 目前,我将图像绘制在UIView的中心,然后将UIView.center属性设置为我想要旋转的原点,然后执行旋转命令。看起来有点像黑客行为,但在我能够让真正的翻译工作之前,这是我的唯一选择。 谢谢!