私はコアグラフィックスを使用して、iphoneで丸い四角いフローティングダイアログを作成しています。ストロークを同心円の丸い矩形のパスに沿って適用すると、ストローク間のギャップが必ずコーナーに表示されます。これらの同じストロークは、直線セグメント上に並んで座っている。コアグラフィックス:ストローク時の丸いパス間のギャップ
コードから該当の抜粋(無関係なコードを除去):
-(void)drawRect:(CGRect)rect {
CGRect borderRect = CGRectInset(rect, 1.0, 1.0);
UIBezierPath *borderPath = [UIBezierPath bezierPathWithRoundedRect:borderRect cornerRadius:6.0];
[...]
CGContextSetStrokeColorWithColor(context, bevelStrokeColor);
CGContextSetLineWidth(context, 2.0);
CGContextAddPath(context, borderPath.CGPath);
CGContextStrokePath(context);
[...]
CGRect inlayRect = CGRectInset(rect, inlayPathInset, inlayPathInset);
UIBezierPath *inlayPath = [UIBezierPath bezierPathWithRoundedRect:inlayRect cornerRadius:6.0];
[...]
CGContextSetStrokeColorWithColor(context, inlayStrokeColor);
CGContextSetLineWidth(context, 2.0);
CGContextAddPath(context, inlayPath.CGPath);
CGContextStrokePath(context);
[...]
}
ここで、画像の:私は上記の投稿コードの異なるバージョンを試みた
。私はパスを手動で作成し、UIBezierPathインスタンスメソッドを使用して作成と描画を行いました。ビューのレイヤーとさまざまな組み合わせでいくつかのアイデアを使ってcornerRadiusを設定しました。彼らの中には問題を改善した人もいたが、その撤回は間に合わなかった。
私は境界線を使用していただけで気にしませんでしたが、いくつかの同心円の丸い四角形がありますので、このギャップも問題になります。
編集:転記時に発生したコードの入力ミスを修正しました。
ちょうど私があなたのコードに問題が表示されていないと絵から言うことができないので、ここでは推測の話が、どのような値が変数 'cornerRadius'でインスタンス化するとき' inlayPath'?ボーダーパスのような6.0かもしれませんか? borderPathの内側の半径は外側よりも小さいことに注意してください。したがって、inlayPathsコーナー半径は6.0未満である必要があります。それ以上であれば、目に見える効果があります。 – pkluz
私はそれを6.0に編集するのを忘れていました。私は他のパス初期化からそれを取り出した。彼らはどちらも6歳ですが、それは正しいことではありません。私は今、それの背後にある数学を導き出すことを試みています。私が何かを思い付くなら、私は分かち合う。 – RGuy8032