ユーザーの操作中に 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);
というエラーが表示されます
readonly プロパティへの代入
クラスも調べましたCATransformLayer
が、それを self.layer に割り当てようとすると、次のエラーが表示されます。
互換性のない型 CATransform3D から CATransformLayer への割り当て
私の質問は、Autolayout コーディナントに干渉せずに UIView のレイヤーをスケーリングする方法があるかということです。