0

アプリに 2 次元のテーブルがあり、各セルの周りに 1 ピクセルの太さの境界線を設定したいと考えています。各セルは別個のUIViewものであり、次のようなものでそのような境界線を描くことができることがわかりました:

dataCell.layer.borderWidth = 0.5; // repeat for each cell
tableContainer.layer.borderWidth = 1.0; // do once for the entire table

これは、Retina デバイスと非 Retina デバイスの両方に適していました。ただし、テーブルを表示する前に最初に画像にレンダリングしたいのですが、Retina 以外のデバイスでは結果は次のようになります。

ぼやけたセルディバイダー

表の境界線は問題ありませんが、個々のセルの境界線がぼやけています。全体を画像に変換するために使用する方法は次のとおりです。

- (UIImage *)getImage {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]);
    [[self layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

上のカテゴリUIViewです。これを画像として表示したい理由は、デバイスを回転させると、テーブル全体が単一の静的オブジェクトである場合に結果のアニメーションがより良く見えるためです。彼らの最終的な位置に。

このぼやけを修正するにはどうすればよいですか?

編集:

1 ピクセルより小さい線を実際に表示することはできませんが、実際には、これを機能させることができる 2 つのことがあります。まず第一に、Retina スクリーンでは 0.5 の「論理」ピクセルは正確に 1 ピクセルであり、iOS レンダリングはその場合完全に問題ありません。

Retina 以外のデバイスでは、iOS の動作が異なります。ビュー全体に 0.5 ピクセルの境界線を要求すると、ビューの左と下に 1 ピクセルの境界線が描画されます。このようなビューをグリッドに並べて配置すると、実際には非常に適切な結果が得られます。ビュー間に 1 ピクセルの境界線が表示されます。

これは、白いセルの周囲に 0.5 ピクセルの境界線があり、その右側が欠けている非網膜レンディションのスクリーンショットです (通常、コンテナー全体に 1 ピクセルの境界線を追加して修正します)。これは画像化せずに。

0.5px ボーダー

私は、それUIGraphicsGetCurrentContext()が WYSIWYG のようなレンダリングを行い、それ以外の場合に画面にレンダリングされるものとまったく同じ画像を提供すると考えました。それを行うためにそれをだます方法はありますか?

4

0 に答える 0