-->

旋转的UIImage和移动(Rotate UIImage and Move)

2019-10-18 22:50发布

我已搜查堆栈溢出的次数太多,也发布了一个问题,但徒劳无功。 我需要实现的功能在我的拼贴应用,在那里用户可以旋转的UIImage,并将其移动作为旋转图像。 任何想法怎么办呢? 如果需要的话我会尝试所有的人。 我感到沮丧寻找它的最后两天。

在第i个已旋转使用CGAffineTransformMakeRotation(角度)的UIImage的的帧。 这是工作,但旋转后移动图像时,它被创造失真。 所以,做任何其他方式?

编辑:要清楚,旋转角度为定制。

Answer 1:

审议了一些类似的问题( 改变大小的UIView旋转后的变换以及如何调整UIView的时候CGAffineTransformIdentity )并阅读有关CGAffineTransform正式文件我是来一些简单的结论。 下面会解释它们。

当您使用CGAffineTransform的,接着框架一些对象变换必须使用一些规则来获得正确的结果:

  1. 如果变换对象的属性等于CGAffineTransformIdentity你可以改变对象的框架或使用CGAffineTransform不受限制。

  2. 如果如果变换对象的属性不等于CGAffineTransformIdentity ,你想改变对象的框架没有CGAffineTransform
    一个)保存对象的值变换到一些地方(或另一种类型)变量
    b)列出的变换对象的属性来CGAffineTransformIdentity
    c)中对象的变化帧
    d)恢复为本地(或另一种类型)变量变换值。

  3. 如果变换对象的属性不等于CGAffineTransformIdentity ,你想使用CGAffineTransform ,例如new_transform
    一)使用CGAffineTransformConcat([object transform] , new_transform)以获得result_transform
    b)列出的变换对象的值,以result_transform

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

注意:你必须记住,当你使用CGAffineTransformConcat所有变换累计。 例如:如果希望从6度至7度旋转对象,则必须添加变换旋转1度,而不是7,否则你获得旋转6 + 7 = 13度。



Answer 2:

对于任何人谁可能迁移这里可以找到一些代码,这部分:

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

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



文章来源: Rotate UIImage and Move