3

问题

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

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

我的尝试

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

CGRect result ;

CGAffineTransform transform = self.transform ;

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

return result ;

为什么?

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

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

评论

我的变换是比例变换。

4

2 回答 2

16

transform不影响center也不bounds

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

    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
    );
于 2014-10-04T16:30:46.370 回答
0

斯威夫特 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)
    }
}
于 2018-07-27T04:07:05.460 回答