我已经多次搜索堆栈溢出并发布了一个问题但是徒劳无功。我需要在我的拼贴应用程序中实现一个功能,用户可以旋转uiimage并将其移动为旋转图像。知道怎么做吗?如果需要,我会尝试所有这些。在过去的两天里,我很沮丧地寻找它。
首先,我使用CGAffineTransformMakeRotation(角度)旋转了UIImage的帧。它工作正常,但在旋转后移动图像时,会产生失真。那么任何其他方式呢?
编辑: 说清楚, 旋转角度是自定义的。
答案 0 :(得分:4)
检查了一些类似的问题(Change uiview size after rotation transform和How to resize the UIView when CGAffineTransformIdentity)并阅读了Official documentation about CGAffineTransform我得出了一些简单的结论。将在下面解释。
对某些具有后续帧变换的对象使用CGAffineTransform
时,必须使用一些规则来获得正确的结果:
如果对象的转换属性等于CGAffineTransformIdentity
,您可以更改对象框架或无限制地使用CGAffineTransform
。
如果对象的transform属性不等于CGAffineTransformIdentity
,并且您希望在没有CGAffineTransform
的情况下更改对象框架:
a)将对象变换的值保存到某些本地(或其他类型)变量
b)将object的transform属性设置为CGAffineTransformIdentity
c)改变对象框架
d)从本地(或其他类型)变量恢复变换值。
CGAffineTransformIdentity
,并且您希望使用CGAffineTransform
,例如new_transform
:CGAffineTransformConcat([object transform] , new_transform)
获取result_transform
result_transform
遵守这些简单规则有助于避免许多问题。
注意:您必须记住,当您使用CGAffineTransformConcat
所有变换累计时。例如:如果要将旋转对象从6度旋转到7度,则必须将变换旋转添加到1度,而不是7。否则,您将获得旋转6 + 7 = 13度。
答案 1 :(得分:1)
对于可能在此迁移的anyOne,可能会发现本部分代码很有用:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
imageToBeMoved.center = CGPointMake(primaryTapPoint.x ,primaryTapPoint.y);
[UIView commitAnimations];
更改:imageToBeMoved.frame到imageToBeMoved.center解决问题