【问题标题】:Apply definitely CGAffineTransform* to a UIView将 CGAffineTransform* 应用到 UIView
【发布时间】:2014-09-12 15:42:31
【问题描述】:

我在缩放转换时遇到问题,我必须将其应用于 Swift 上的 UIViews(但在 Objective-c 中也是如此)

我在gestureRecognizer 期间将CGAffineTransformMakeScale() 应用于多个视图。

这就像卡片组的循环。我删除了顶部的一个,放大后面的 X 个,然后在后面添加了一个新的。

第一次迭代按预期工作。但是当我尝试刷新的前一张时,所有卡片都会重置为其初始帧大小,因为我正在尝试应用新的变换,这似乎取消了前一个并将视图重置为其初始状态。

如何根据 UIView 生成的新大小确定/提交第一个转换更改,以便能够在此之后应用新的转换?

我尝试了UIView.commitAnimations(),但没有任何变化。

编辑:

这是一个简单的例子来理解我试图做什么:

假设我有一个 100x100 的初始 UIView

我的收缩系数为 0.95,这意味着后面的下一个视图将是 95x95,然后是 90.25,然后是 85.73,等等

如果我删除顶部的 (100x100),我想放大其他的,所以 95x95 将变为 100x100,等等
这是通过应用收缩因子的倒数来完成的,这里是 1.052631...

我第一次应用逆因子时,所有视图都已正确调整大小。
我的问题是,当我通过在新的前端 UIView 上滑动再次触发所有视图的新调整大小时(例如,变成 95x95 的 90.25x90.25 现在应该缩放到 100x100)。
此时,相同的CGAffineTransformMakeScale() 应用于所有视图,所有视图都立即重置为其原始帧大小(因此现在的 95x95 重置为 90.25x90.25,然后开始对这个旧大小应用转换)。

正如这里或其他地方所建议的那样,在每次转换结束时使用 UIView.commitAnimations() 不会改变任何东西,使用 CGAffineTransformConcat() 就像自己控制缩放一样,当然视图变得非常大.. .

我希望我把自己说得更清楚了,这并不容易解释,不要犹豫,问这里是否有问题。

【问题讨论】:

  • 我能想到的一种方法是调整卡的帧而不是使用CGAffineTransforms。或者,您可能需要应用 CGTransformConcat(view.transform, newScaleTransform) ?
  • 我考虑过使用 CGTransformConcat,但问题是它会产生巨大的变换(就像我的比例因子的幂^2)。而且我想避免每次都重新计算一个新因素,以便能够将其添加到前一个因素中。之前的“提交”然后应用相同的因素会更容易做到。
  • 您可能误解了CGTransformConcat 的作用。听起来您希望它占用更多存储空间,而它真正做的是在数学上连接两个变换(通过矩阵乘法),因此数据大小保持不变。
  • 我已经编辑并添加了一个我正在尝试做的具体示例,希望这会有所帮助。

标签: ios objective-c uiview swift


【解决方案1】:

经过大量阅读和咨询比我更了解iOS编程的同事,这是我的结论:

  • 应用CGAffineTransformMakeScale() 只在视觉上修改视图而不是它的属性,并且由于之后修改视图的边界和/或框架很困难(并且成本高昂),我应该避免尝试制作变换、更新边界、进行另一个变换等。

  • 应用相同的CGAffineTransformMakeScale()只会重置效果,不适用于之前的效果。

  • 在之前的CGAffineTransformMakeScale()(或CGAffineTransformConcat())之上应用具有相同值的CGAffineTransformScale() 会产生一些不可预测的影响,并且很难精确计算每次要应用的新值达到我想要的效果。

我能做的最好的方法是只应用一个CGAffineTransformMakeScale(),我将在视图的整个生命周期中不断更新比例值。 这意味着我现在要反向修改我的所有实现逻辑,但这是最简单的方法。

感谢大家的提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多