【问题标题】:Set a UIView scale transform without effecting other transforms设置 UIView 缩放变换而不影响其他变换
【发布时间】:2014-09-23 16:55:33
【问题描述】:

我有一个 UIView,当它被触摸时我会缩小它,而当触摸结束或取消时我会放大它。

我一直在这样缩放视图

缩小:

CGAffineTransform transform = CGAffineTransformMakeScale(0.95, 0.95);
self.transform = transform;

缩放:

CGAffineTransform transform = CGAffineTransformMakeScale(1.0, 1.0);
self.transform = transform;

这不会保留任何其他转换。我知道我可以使用它来保留旧的转换:

缩小:

CGAffineTransform transform = CGAffineTransformScale(self.transform, 0.95, 0.95);
self.transform = transform;

缩放:

CGAffineTransform transform = CGAffineTransformScale(self.transform, 1.0, 1.0);
self.transform = transform;

当然,这里的放大没有效果——另外还有可能应用累积的缩小动画。基本上我想要一种绝对应用比例变换而不影响任何其他变换的方法。有没有办法做到这一点?我不认为使用 1.0/0.95 作为放大系数,因为视图可能会在一次被取消或结束之前收到两次触摸。

我想我问的问题和这个问题一样:Applying just the scale component of a CGAffineTransform to a UIView,但我认为这里的答案对我不起作用。

我的目标是 iOS 7 及更高版本。

【问题讨论】:

  • '当然在这里放大没有效果。'请您详细说明一下吗?
  • 该行将当前比例乘以 1,因此它什么也不做。

标签: ios uiview core-graphics quartz-2d


【解决方案1】:

我不确定这是否正是您要寻找的,但对我而言,我需要比例始终保持绝对一致,因此我直接修改矩阵。

CATransform3D transform = layer.transform;
if (makeSmaller)
{
    // Scale to 0.9
    transform.m11 = 0.9f;
    transform.m22 = 0.9f;
}
// Cell needs to grow to normal size
else if (restoreToOriginal)
{
    // Scale to 1.0 again
    transform.m11 = 1.0f;
    transform.m22 = 1.0f;
}

// Set the desired Y translation
transform.m42 = desiredffset;
layer.transform = transform;

【讨论】:

猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多