菜鸟教程小白 发表于 2022-12-12 12:11:08

ios - 绘制抗锯齿线


                                            <p><p>我正在屏幕上画一条线,其中包括对角线,而对角线又是这样绘制的:</p>

<p> <img src="/image/RHOWH.png" alt="enter image description here"/> </p>

<p>注意它看起来一点也不平滑。我已经阅读了几篇关于此的文章,似乎 <a href="https://stackoverflow.com/questions/21392675/calayer-antialiasing-not-as-good-as-uiview-antialiasing" rel="noreferrer noopener nofollow">this</a>看起来更接近我遇到的问题,但解决方案对我不起作用。</p>

<p>这是我设置图层的方法:</p>

<pre><code>- (void)viewDidLoad
{
    ;

    // Instantiate the navigation line view
    CGRect navLineFrame = CGRectMake(0.0f, 120.0f, self.view.frame.size.width, 15.0f);
    self.navigationLineView = [ initWithFrame:navLineFrame];

    // Make it&#39;s background transparent
    self.navigationLineView.backgroundColor = ;
    self.navigationLineView.opaque = NO;

    HyNavigationLineLayer * layer = [ init];
    layer.shouldRasterize = YES;
    layer.rasterizationScale = .scale;
    layer.contentsScale = [ scale];
    layer.needsDisplayOnBoundsChange = YES;

    [ addSublayer:layer];
    ;
    ;
}
</code></pre>

<p>这是我在图层中的绘制方式:</p>

<pre><code>- (void)drawInContext:(CGContextRef)ctx
{
    CGFloat bottomInset = 1.0f / [ scale] * 2.0f;

    CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
    CGContextSetStrokeColorWithColor(ctx, .CGColor);

    GLfloat padding = kHyNavigationLineViewPadding * 4.0f;
    GLfloat searchSpace = self.frame.size.width - padding - kHyNavigationLineViewPointerSize * 2.0f;
    GLfloat x = kHyNavigationLineViewPadding * 2.0f + searchSpace * self.offset;

    CGContextSetLineWidth(ctx, 2.0f);
    CGContextMoveToPoint(ctx, kHyNavigationLineViewPadding, 0.0f);
    CGContextAddLineToPoint(ctx, x, bottomInset);
    CGContextAddLineToPoint(ctx, x + kHyNavigationLineViewPointerSize, self.frame.size.height);
    CGContextAddLineToPoint(ctx, x + kHyNavigationLineViewPointerSize * 2.0f, bottomInset);
    CGContextAddLineToPoint(ctx, self.frame.size.width - kHyNavigationLineViewPadding, 0.0f);

    // Draw
    CGContextStrokePath(ctx);
}
</code></pre>

<p>关于如何解决这个问题的任何提示?</p>

<p>编辑:忘记提及我首先在图层中绘制的原因:我需要为使这条线动画的属性设置动画效果很好,所以在 <code>drawRect</code> 中绘制不会工作。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以使用 UIBezierPath 代替使用quartz来渲染代码:</p>

<pre><code>UIBezierPath* path = ;

[ setStroke];

GLfloat padding = kHyNavigationLineViewPadding * 4.0f;
GLfloat searchSpace = self.frame.size.width - padding - kHyNavigationLineViewPointerSize * 2.0f;
GLfloat x = kHyNavigationLineViewPadding * 2.0f + searchSpace * self.offset;

path.lineWidth = 2.0;
;
;
;
;
;

;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 绘制抗锯齿线,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26550549/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26550549/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 绘制抗锯齿线