この投稿のように、コア アニメーション レイヤーを使用して「マーチング アリ」選択フレームを作成しています: MARCHING ANTS WITH CORE ANIMATION。しかし、私が気に入らないのは CAShapeLayer の線幅だけです。幅は正確に 1px にする必要がありますが、アンチエイリアス処理のため、線幅は約 2 ピクセルで少し透明です。
アンチエイリアスをオフにする方法はありますか?
この投稿のように、コア アニメーション レイヤーを使用して「マーチング アリ」選択フレームを作成しています: MARCHING ANTS WITH CORE ANIMATION。しかし、私が気に入らないのは CAShapeLayer の線幅だけです。幅は正確に 1px にする必要がありますが、アンチエイリアス処理のため、線幅は約 2 ピクセルで少し透明です。
アンチエイリアスをオフにする方法はありますか?
私は同じ問題に遭遇しました。幸いなことに、もう少し歩き回り、CGContextSetShouldAntialias( GCContextRef, BOOL) 関数を見つけました。グラフィックス コンテキストでアンチエイリアシングが発生していたことがわかりました。
ビットマップ コンテキストにレンダリングする CALayer の下の一連のシェイプ レイヤーでこれをテストしました。デフォルトでは、100 から 130 (ビットマップ値) の範囲で設定した値と、それよりも低い数値を取得しました。CGContextSetShouldAlias( context, NO) を設定した後、値だけを取得しました。
docs に基づいて、アンチエイリアスにこだわっているようです:
CAShapeLayer クラスは、座標空間に 3 次ベジェ スプラインを描画します。シェイプは、レイヤーのコンテンツとその最初のサブレイヤーの間で合成されます。
シェイプはアンチエイリアス処理されて描画され、解像度の独立性を維持するためにラスタライズされる前に可能な限りスクリーン スペースにマップされます。ただし、レイヤーまたはその祖先に適用される CoreImage フィルターなどの特定の種類の画像処理操作は、ローカル座標空間でのラスター化を強制する場合があります。