iOS:-setFrame在CGAffineTransformMakeRotation之后拉伸视图

时间:2014-07-20 08:02:51

标签: ios core-graphics transform frame

我通过调用

旋转了UIImageView

myView.transform = CGAffineTransformMakeRotation(someRadians) myView.layer.allowsEdgeAntialiasing = YES;

如果我打电话......

[myView setFrame:CGRectMake(myView.frame.origin.x, myView.frame.origin.y-100, myView.frame.size.width, myView.frame.size.height)];

... 我的观点被拉伸,而不是向上移动一点。

这是正常行为吗?我不应该在旋转视图后设置框架?有解决方案吗?感谢。

2 个答案:

答案 0 :(得分:2)

来自UIView documentation

  

警告:如果transform属性不是标识转换,则此属性的值未定义,因此应忽略。

换句话说,如果视图没有标识转换,请不要使用视图frame

答案 1 :(得分:0)

事实证明,正如 @Scott Berrevoets 建议的那样,在进行转换后无法使用frame属性。

相反,我们必须使用另一个转换来移动视图。为了不进行移动转换覆盖轮换,我们可以将翻译转换连接到视图的现有轮播转型。

CGAffineTransform moveTransform = CGAffineTransformMakeTranslation(0, -100);
myView.transform = CGAffineTransformConcat(myView.transform, moveTransform);