UIView の境界線を drawRect で描画された線と結合しようとしています。どちらも同じ幅で使用しています。しかし、問題は、描画された線の結果の幅が両方で同じ場合とそうでない場合があることです-これはデバイスの向きによっても変わります! ただし、デバイスの向きを変更しなくても、一般的には同じ幅ではありません。
境界線は次のように描画されます:
view.layer.borderColor = [UIColor blackColor].CGColor;
view.layer.borderWidth = 1.0f;
そのビューの上には、UIView のサブクラスである別のビューがあります。両方のビューの幅は同じで、この 2 番目のビューは上のビューの上部をカバーしています。カバー ビューは、drawRect で次のコードを使用して左側に線を描画します。これは、その下にある上のビューの境界線と完全に一致するはずです。
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat x = self.bounds.origin.x;
CGFloat y = self.bounds.origin.y;
CGFloat width = self.bounds.size.width;
CGFloat height = self.bounds.size.height;
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 1.0f);
// Left line
CGContextMoveToPoint(context, x, y);
CGContextAddLineToPoint(context, x, height);
CGContextStrokePath(context);
// Right line
CGContextMoveToPoint(context, width - 1.0f, y);
CGContextAddLineToPoint(context, width - 1.0f, height);
CGContextStrokePath(context);
これを達成する方法はありますか?現在、幅は常に 1.0f ですが、両方の線が同じ表示幅で描かれているのは偶然です。
目標は、下部の角が丸くなっているが、上部の通常のエッジを持つビューのように見えるものになることです。それが私がこれをしている理由です。最初のビューは角が丸くなっており、その上の 2 番目のビューは幅は同じですが、上部が覆われているため、上部の丸みを帯びた角は見えません。
縦向きのスクリーンショット:
横向きのスクリーンショット:
黄色のビューは白いビューの上にあります。白いビューの黒い線は、view.layer.borderWidth = 1.0f の結果として描画されます。黄色のビューの左右にある黒い線は、上記のコードで drawRect に描画されます。方向を変更すると再描画がトリガーされますが、描画コード自体は同じままです。どちらのスクリーンショットも、Retina ディスプレイを搭載した iPhone (iPhone 4S) のものです。
私が知る限り、すべての値は「整数」です。
x: 0.000000, y: 0.000000
width: 264.000000, height: 10.000000
frame.origin.x: 33.000000, frame.origin.y: 38.000000