0

UIViewレイヤーマスクを追加して、サブクラスに丸い角を追加しました。以下はMontouchコードですが、ObjCでも意味を理解するのに十分簡単なはずです:

// 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プロパティをオーバーロードしました。フレームを設定すると、丸みを帯びた角の形状を維持するようにマスクが調整されます。

ただし、フレーム サイズの変化をアニメーション化すると、代わりにマスクがすぐにアニメーションの目的の値に設定されます。

ビューがアニメーションの一部であることを検出し、マスクを正しくアニメーション化する方法はありますか?

4

1 に答える 1

1

これは、CoreAnimation が明示的なアニメーションに対してどのように機能するかです。

明示的なアニメーションでは、元のオブジェクトの値を実際に変更することはなく、プレゼンテーション レイヤーでオブジェクトをアニメーション化するだけです。したがって、最終的に必要な値でアニメーションを開始する前に、オブジェクトがセットアップされていることを確認する必要があります。

このクラスの問題を解決する方法の完全な説明は、WWDC 2011 オンライン ビデオの「Core Animation Essentials」で説明されています。セッション 421 を探します

于 2012-02-19T18:53:42.270 に答える