4

我正在尝试在用户交互期间缩放 UIView,并在视图上实现了 CGAffineTransform,如下所示:

@implementation Tileview
{
CGAffineTransform _tempTransform;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
_tempTransform = self.transform;
self.transform = CGAffineTransformScale(self.transform, 1.2, 1.2);
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 {
self.transform = _tempTransform;
}

这似乎很好地缩放了视图,但后来我注意到在屏幕上移动视图时开始出现不可预测的结果,并且做了一些研究我了解到这可能是因为我正在使用自动布局。建议是动画层而不是视图对象。

所以我尝试重构上面的代码来使用CATranform3D,因为它似乎CAAffineTransform无法应用于图层。但一个CATransform3D可能是。但我无法弄清楚如何使用该 Transform 对象使图层缩放。

我试图将转换应用于视图层,如下所示:

self.layer.sublayerTransform = CATransform3DMakeScale(1.2, 1.2, 0.0f);

这扩展了我视图的所有子层

但我尝试将其应用于

 self.layer = CATransform3DMakeScale(1.2, 1.2, 0.0f); 

我收到一条错误消息

分配给只读属性

我还查看了CATransformLayer课程,但是当尝试将其分配给 self.layer 时,我收到一条错误消息:

从不兼容的类型 CATransform3D 分配给 CATransformLayer

所以我的问题是,有没有办法在不干扰自动布局坐标的情况下缩放 UIView 的图层。

4

1 回答 1

3

为什么要使用子层变换?这应该有效:

self.layer.transform = CATransform3DScale(self.layer.transform, 1.2, 1.2, 1);

如果你真的需要,你也可以将仿射变换应用于图层CATransform3DMakeAffineTransform(<#CGAffineTransform m#>)

我注意到您正在保存初始转换以在触摸结束后应用它。您可以简单地恢复初始转换

self.layer.transform = CATransform3DIdentity;
于 2015-09-02T14:48:14.190 回答