如何在变换之前计算UIView的帧?

时间:2014-10-04 11:58:41

标签: ios objective-c uiview cgaffinetransform cgsize

问题

我有一个UIView,我向它申请CGAffineTransform。我希望能够知道视图的框架如果未应用转换

我正在寻找一个(简单的)解决方案来处理变换是“零变换”(不可逆)的情况。

我的尝试

我认为以下不适用于“零变换”。

CGRect result ;

CGAffineTransform transform = self.transform ;

result = CGRectApplyAffineTransform(self.frame, CGAffineTransformInvert(transform)) ;

return result ;

为什么?

我需要为动画执行此操作:

  • 初始设置:我将transform“设置为0”。插入视图,但所有元素的框架都像视图不在此处一样。
  • 最终设置:我计算所有元素的帧数,这次我考虑了新视图。我将其transform“设置为1”。

说明

我的变换是一种比例变换。

2 个答案:

答案 0 :(得分:13)

transform不会影响centerbounds

所以,你可以用这个简单的代码来计算它:

    CGPoint center = view.center;
    CGSize size = view.bounds.size;

    CGRect frameForTransformIdentity = CGRectMake(
        center.x - size.width / 2,
        center.y - size.height / 2,
        size.width,
        size.height
    );

答案 1 :(得分:0)

Swift 4.1版本:

extension UIView
{
    var frameWithoutTransform: CGRect
    {
        let center = self.center
        let size   = self.bounds.size

        return CGRect(x: center.x - size.width  / 2, 
                      y: center.y - size.height / 2,
                  width: size.width,
                 height: size.height)
    }
}