レイヤーマスクを追加して、サブクラスUIView
に丸い角を追加しました。次Montouchコードですが、にObjCでも意味を取得するのに十分簡単なはず:CAShapeLayerをマスクにしたUIViewのサブクラスが正しくアニメーション化されない
// Add a layer that holds the rounded corners.
UIBezierPath oMaskPath = UIBezierPath.FromRoundedRect (this.Bounds, this.eRoundedCorners, new SizeF (this.fCornerRadius, this.fCornerRadius));
private void UpdateMask()
{
if(this.Layer.Mask == null)
{
CAShapeLayer oMaskLayer = new CAShapeLayer();
oMaskLayer.Frame = this.Bounds;
// Set the newly created shape layer as the mask for the image view's layer
this.Layer.Mask = oMaskLayer;
}
((CAShapeLayer)this.Layer.Mask).Path = oMaskPath.CGPath;
}
私はFrame
プロパティをオーバーロードしています。フレームを設定すると、角が丸くなるようにマスクが調整されます。
フレームサイズの変更をアニメーション化すると、マスクはすぐにアニメーションの宛先値に設定されます。
ビューがアニメーションの一部であることを検出し、マスクを正しくアニメーション化させる方法はありますか?
私はビデオを見ました。私は明示的なアニメーションを使用していません。私は、UIViewのプロパティを調整していると、これは、層のプロパティの変更で、それはアニメーション化されていません。代わりにUIViewのレイヤーをアニメーション化しようとしました。UIViewのバックレイヤーは決してアニメーション化されません。しかし、暗黙的なアニメーションを使用してCAShapeLayerをアニメーション化することはできますが、同時にUIViewをアニメーション化することもありません。私はここで迷っています...どうすれば両方を組み合わせることができますか? – Krumelur