簡體   English   中英

Autolayout和CGAffineTransform

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM