旋转UIImage并移动

时间:2013-11-07 13:43:46

标签: ios uiimageview uiimage ciimage

我已经多次搜索堆栈溢出并发布了一个问题但是徒劳无功。我需要在我的拼贴应用程序中实现一个功能,用户可以旋转uiimage并将其移动为旋转图像。知道怎么做吗?如果需要,我会尝试所有这些。在过去的两天里,我很沮丧地寻找它。

首先,我使用CGAffineTransformMakeRotation(角度)旋转了UIImage的帧。它工作正常,但在旋转后移动图像时,会产生失真。那么任何其他方式呢?

编辑: 说清楚, 旋转角度是自定义的。

2 个答案:

答案 0 :(得分:4)

检查了一些类似的问题(Change uiview size after rotation transformHow to resize the UIView when CGAffineTransformIdentity)并阅读了Official documentation about CGAffineTransform我得出了一些简单的结论。将在下面解释。

对某些具有后续帧变换的对象使用CGAffineTransform时,必须使用一些规则来获得正确的结果:

  1. 如果对象的转换属性等于CGAffineTransformIdentity,您可以更改对象框架或无限制地使用CGAffineTransform

  2. 如果对象的transform属性不等于CGAffineTransformIdentity,并且您希望在没有CGAffineTransform的情况下更改对象框架:
    a)将对象变换的值保存到某些本地(或其他类型)变量
    b)将object的transform属性设置为CGAffineTransformIdentity
    c)改变对象框架
    d)从本地(或其他类型)变量恢复变换值。

  3. 如果对象的转换属性不等于CGAffineTransformIdentity,并且您希望使用CGAffineTransform,例如new_transform
    a)使用CGAffineTransformConcat([object transform] , new_transform)获取result_transform
    b)将对象的变换值设置为result_transform
  4. 遵守这些简单规则有助于避免许多问题。

    注意:您必须记住,当您使用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解决问题