不影响其他变换的情况下设置UIView的缩放变换

5
我有一个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作为放大因子不行,因为可能在取消或结束一个触摸之前视图可能会接收两个触摸。
我认为我正在询问与此问题相同的事情:将CGAffineTransform的比例组件应用于UIView,但我不认为这里的答案适合我。
我针对iOS 7及以上版本。

当然,在这里,扩展规模是没有影响的。你能详细解释一下吗? - duci9y
那行代码将当前比例乘以1的因子,因此它什么也没做。 - Darren
1个回答

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;

我使用的是CGAffineTransform而不是CATransform3D,并设置视图变换属性而不是层的,但基本上我使用了这种技术。我从这个答案中得到了灵感:https://dev59.com/C2ct5IYBdhLWcg3wgNrR#12040266 - Darren
在这里评论,我发布了这个问题,所以我会接受你的答案... http://stackoverflow.com/questions/42383232/applying-3d-transform-after-pinching-it - Abdul Waheed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接