1

I have searched stack overflow too many times and also posted a question but in vain. I need to implement a function in my collage app where user can rotate a uiimage and move it as rotated image. Any idea of how to do it? I will try all of them if needed. Am being frustrated searching for it for last two days.

At first i have rotated the frame of the UIImage using CGAffineTransformMakeRotation(angle). It was working but when moving the image after rotation, it was creating distortion. So any other way of doing it?

edit: to make it clear, rotation angle is custom.

4

2 回答 2

5

在检查了一些类似的问题(Change uiview size after rotation transformHow to resize the UIView when CGAffineTransformIdentity)并阅读了有关 CGAffineTransform 的官方文档后,我得出了一些简单的结论。将在下面解释它们。

当您使用CGAffineTransform带有跟随帧变换的某些对象时,您必须使用一些规则来获得正确的结果:

  1. 如果对象的变换属性相等CGAffineTransformIdentity,您可以更改对象的框架或CGAffineTransform不受限制地使用。

  2. 如果如果对象的变换属性不相等CGAffineTransformIdentity并且您想要更改对象的框架而不CGAffineTransform
    a)将对象变换的值保存到某个局部(或其他类型)变量
    b)将对象的变换属性设置为 CGAffineTransformIdentity
    c)更改对象的框架
    d ) 从本地(或其他类型)变量中恢复变换值。

  3. 如果对象的变换属性不相等CGAffineTransformIdentity并且您想使用CGAffineTransform,例如new_transform
    a)用于CGAffineTransformConcat([object transform] , new_transform)获取result_transform
    b)将对象的变换值设置为result_transform

遵守这些简单的规则将有助于避免许多问题。

注意:你必须记住,当你使用CGAffineTransformConcat 所有的变换时。例如:如果要将对象从 6 度旋转到 7 度,则必须将变换旋转添加到 1 度,而不是 7。否则您将获得旋转 6 + 7 = 13 度。

于 2013-11-08T15:27:11.310 回答
1

对于任何可能迁移到这里的人,可能会发现这部分代码很有用:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
imageToBeMoved.center = CGPointMake(primaryTapPoint.x   ,primaryTapPoint.y); 
[UIView commitAnimations]; 

更改: imageToBeMoved.frame 到 imageToBeMoved.center 解决了这个问题

于 2013-11-11T06:02:14.263 回答