• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 绘制抗锯齿线

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:11:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

enter image description here

注意它看起来一点也不平滑。我已经阅读了几篇关于此的文章,似乎 this看起来更接近我遇到的问题,但解决方案对我不起作用。

这是我设置图层的方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

    // Make it's background transparent
    self.navigationLineView.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.0f];
    self.navigationLineView.opaque = NO;

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

    [[self.navigationLineView layer] addSublayer:layer];
    [self.view addSubview:self.navigationLineView];
    [self.navigationLineView.layer setNeedsDisplay];
}

这是我在图层中的绘制方式:

- (void)drawInContextCGContextRef)ctx
{
    CGFloat bottomInset = 1.0f / [[UIScreen mainScreen] scale] * 2.0f;

    CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
    CGContextSetStrokeColorWithColor(ctx, [UIColor whiteColor].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);
}

关于如何解决这个问题的任何提示?

编辑:忘记提及我首先在图层中绘制的原因:我需要为使这条线动画的属性设置动画效果很好,所以在 drawRect 中绘制不会工作。



Best Answer-推荐答案


您可以使用 UIBezierPath 代替使用quartz来渲染代码:

UIBezierPath* path = [UIBezierPath bezierPath];

[[UIColor whiteColor] 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;
[path moveToPoint:CGPointMake(kHyNavigationLineViewPadding, 0)];
[path addLineToPoint:CGPointMake(x, bottomInset)];
[path addLineToPoint:CGPointMake(x + kHyNavigationLineViewPointerSize, self.frame.size.height)];
[path addLineToPoint:CGPointMake(x + kHyNavigationLineViewPointerSize * 2.0f, bottomInset)];
[path addLineToPoint:CGPointMake(self.frame.size.width - kHyNavigationLineViewPadding, 0.0f)];

[path stroke];

关于ios - 绘制抗锯齿线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26550549/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap