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

标签 ios uiview core-graphics quartz-2d

我有一个 UIView,它在被触摸时缩小,在触摸结束或取消时缩小。

我一直这样缩放 View

按比例缩小:

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 作为放大系数,因为 View 可能会在一个被取消或结束之前接收到两个触摸。

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

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

最佳答案

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

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;

关于ios - 在不影响其他变换的情况下设置 UIView 缩放变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25064103/

相关文章:

ios - 如何在加载 View 之前获取按钮大小?

comparison - CoreGraphics 中的浮点比较(相等)

ios - 绘制 CIImage 太慢

ios - 加载xib时的执行顺序?

ios sdk 停止多点触控功能

ios - 预处理器循环 '#rep #endrep' 在 Xcode 上不起作用?

iOS Outline of Stroked UIBezierPath/CGPath,作为路径

ios - swift 午睡框架 : do something before sending requests

iphone - 程序化 View 正确旋转

ios - 从另一个类添加 View 作为 presentViewController 导致 UIEvents 不工作