【问题标题】:iOS: -setFrame stretches the view after CGAffineTransformMakeRotationiOS:-getFrame 在 CGAffineTransform MakeRotation 之后拉伸视图
【发布时间】:2014-09-10 23:34:19
【问题描述】:

我通过调用旋转了一个 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)];

...我的视野被拉长了,而不是简单地向上移动一点。

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

【问题讨论】:

    标签: ios core-graphics transform frame


    【解决方案1】:

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

    相反,我们必须通过另一个转换来移动视图。为了不使移动变换覆盖旋转,我们可以将 translation 变换连接到视图现有的 rotation 变换。

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

    【讨论】:

      【解决方案2】:

      来自UIView documentation:

      警告:如果transform 属性不是恒等变换,则该属性的值未定义,因此应被忽略。

      换句话说,如果视图没有身份转换,则不要使用视图的frame。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多