ホームページ  >  に質問  >  本文

iOS CGContext 画图在 UIView和CALayer用相同代码画出来之后线有差异?

这是图,上面的是用UIView,下面的使用CALayer。明显Layer上面有锯齿。这种个情况如何解决呢?

代码如下

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 10);
CGContextSetLineJoin(ctx, kCGLineJoinRound);
CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);

CGContextBeginPath(ctx);

NSArray *xs = @[@(10),@(35),@(60),@(150),@(80)];
NSArray *ys = @[@(100),@(35),@(40),@(200),@(300)];

CGPoint previousCenter = CGPointZero;
for (NSUInteger i = 0; i < [xs count]; i++)
{
    CGPoint start = previousCenter;
    CGPoint end = CGPointMake([xs[i]floatValue], [ys[i]floatValue]);
    if (i == 0) {
        CGContextMoveToPoint(ctx, start.x, start.y);
    }
    
    CGContextAddLineToPoint(ctx, end.x, end.y);
    
    previousCenter = end;
}

CGContextDrawPath(ctx, kCGPathStroke);

UIView是写在 drawRect:(CGRect)rect里面
CALayer是写在 drawInContext:(CGContextRef)ctx里面

PHPzPHPz2764日前379

全員に返信(2)返信します

  • 天蓬老师

    天蓬老师2017-04-18 09:29:50

    CAshapleLayerに変更できます; 以下はiPhone6シミュレーターを100に拡大する効果の画像コードです

    リーリー

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:29:50

    リーリー

    DrawLayer に上記の値を設定します。

    リーリー

    この属性のデフォルト値は 1 です。

    参照コード:

    サブレイヤー

    リーリー

    レイヤー

    リーリー リーリー

    返事
    0
  • キャンセル返事