【问题标题】:How to compute the frame of a UIView before the transform?如何在转换之前计算 UIView 的框架?
【发布时间】:2014-10-04 11:58:41
【问题描述】:

问题

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

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

我的尝试

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

CGRect result ;

CGAffineTransform transform = self.transform ;

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

return result ;

为什么?

我需要为动画这样做:

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

备注

我的变换是比例变换。

【问题讨论】:

  • CGRectApplyAffineTransform 第一个参数应该是 self.frame 。仍然而不是 self.transform 使用 CGAffineTransformIdentity .. 我无法理解你的问题。你想检查CGRectApplyAffineTransform 是否被应用?如果应用得到宽度和高度的变化?

标签: ios objective-c uiview cgaffinetransform cgsize


【解决方案1】:

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
    );

【讨论】:

    【解决方案2】:

    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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多