我尝试在用户交互期间缩放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的层而不干扰Autolayout坐标。