设置UIView缩放变换而不影响其他变换

时间:2014-07-31 16:18:08

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

我有一个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 个答案:

答案 0 :(得分:2)

我不确定这是否正是您正在寻找的,但对我来说,我需要刻度始终保持绝对一致,所以我直接修改矩阵。

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;