【问题标题】:How to know the current scale of a UIView?如何知道 UIView 的当前比例?
【发布时间】:2012-08-20 14:56:16
【问题描述】:

如何找到UIView 的当前比例(缩放级别)?

【问题讨论】:

  • 你是否使用 scrollView 进行缩放?
  • 不,我使用 UIPinchGestureRecognizer 和 CGAffineTransformScale。

标签: ios objective-c uiview zooming scale


【解决方案1】:

如果您正在对视图应用缩放变换,则该变换将通过 UIView 上的 transform property 可用(足够恰当)。根据CGAffineTransform docs,比例变换将在变换矩阵的坐标 (1,1) 和 (2,2) 处具有非零值;因此,您可以通过以下方式获得 x 和 y 比例因子:

CGFloat xScale = view.transform.a;
CGFloat yScale = view.transform.d;

【讨论】:

  • 我已经尝试过了,但是没有用。在这种情况下,我在某处犯了错误。感谢您的回复!
  • 这里要注意:如果仅缩放视图,则效果很好。但是,当视图也被旋转时,它会得到一个错误的值。 @Margaret 的答案在这种情况下有效,即sqrt(Double(transform.a * transform.a + transform.c * transform.c))
【解决方案2】:

根据这个source,使用此方法可以为您提供比例,而不管应用于变换的旋转或平移:

func scale(from transform: CGAffineTransform) -> Double {
    return sqrt(Double(transform.a * transform.a + transform.c * transform.c));
}

我知道我迟到了,但接受的答案对我来说不起作用。

【讨论】:

    【解决方案3】:

    使用围绕CGAffineTransform 变换矩阵的一些数学运算,您可以计算出一个比例。 Margaret's comment 中也提到了这一点。 Swift 允许你编写一个带有计算属性的简单扩展:

    extension CGAffineTransform {
        var scale: Double {
            return sqrt(Double(a * a + c * c))
        }
    }
    

    所以,以后你可以通过在CGAffineTransform上直接调用scale来使用,像这样:

    let someViewScale = someView.transform.scale
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    【解决方案4】:

    检查它会对您有所帮助....在此您可以学习如何使用UIPinchGestureRecognizer 设置最小和最大缩放比例 ....How to set minimum and maximum zoom scale using UIPinchGestureRecognizer

    【讨论】:

      【解决方案5】:

      UIScrollView 和它的 zoomScale 属性提供了该功能。

      编辑:

      知道当前的尺度是由变换矩阵给出的。如您所知,比例值在这里:

      sx, 0,  0
      0 , sy, 0
      . . .. ,1. 
      

      要获取当前状态,只需记录转换的状态即可。但是,要返回该状态,您需要使用上次转换的逆矩阵或加载单位矩阵。

      【讨论】:

      • 我知道,这个项目我不能用UIScrollView,不够强大=/
      【解决方案6】:

      那不是contentScaleFactorreference)吗?

      【讨论】:

      • 在比例修改过程中,这个值是没有变化的,所以我觉得不是这个用途。
      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多