[英]Autolayout and CGAffineTransform
我試圖在用戶交互期間擴展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;
}
這似乎很好地擴展了視圖,但我后來注意到,當我在屏幕上移動視圖時,我開始有不可預測的結果,並且做了一些研究,我了解到這可能是因為我正在使用autolayout。 建議是為圖層設置動畫而不是視圖對象。
所以我試圖重構上面的代碼以使用CATranform3D
因為似乎無法將CAAffineTransform
應用於該層。 但CATransform3D
可能是。 但我無法弄清楚如何使用該Transform對象進行圖層縮放。
我試圖將變換應用於View的圖層,如下所示:
self.layer.sublayerTransform = CATransform3DMakeScale(1.2, 1.2, 0.0f);
這可以擴展我觀點的所有子層
但我試着將其應用到
self.layer = CATransform3DMakeScale(1.2, 1.2, 0.0f);
我收到一個錯誤說
分配給只讀屬性
我還查看了CATransformLayer
類,但是當嘗試將其分配給self.layer時,我收到一條錯誤消息:
從不兼容類型CATransform3D分配給CATransformLayer
所以我的問題是,有沒有辦法在不干擾Autolayout協調員的情況下擴展UIView的層。
你為什么要使用子層變換? 這應該工作:
self.layer.transform = CATransform3DScale(self.layer.transform, 1.2, 1.2, 1);
如果您確實需要通過CATransform3DMakeAffineTransform(<#CGAffineTransform m#>)
您也可以將仿射變換應用於圖層
我注意到你正在保存初始變換以在觸摸結束后應用它。 您可以簡單地恢復初始變換
self.layer.transform = CATransform3DIdentity;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.