fre*_*nnn 13 iphone quartz-graphics
与CGContextSetLineWidth(context, 1)宽度为几乎alwayas至少2个像素代替1-
QQCandleStickLayer.m
-(id)init
{
self = [super init];
if(self != nil)
{
self.delegate = self;
self.opaque = NO;
}
return self;
}
- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context{
CGContextSetLineWidth(context, 1.0f);
CGContextSetAllowsAntialiasing(context, false);
CGContextSetShouldAntialias(context, false);
CGContextSetInterpolationQuality(context,kCGInterpolationNone);
CGContextSetShadowWithColor(context, CGSizeMake( 0.0, 0.0 ), 0, NULL);
CGContextMoveToPoint(context, self.bounds.origin.x+30.5f, self.bounds.origin.y+self.bounds.size.height-indent);
CGContextAddLineToPoint(context, self.bounds.origin.x+30.5f, self.bounds.origin.y+self.bounds.size.height-(self.bounds.size.height-lastY));
CGContextClosePath(context);
CGContextSetRGBStrokeColor(context, 119.0f/255, 119.0f/255, 119.0f/255, 1.0);
CGContextStrokePath(context);
}
Run Code Online (Sandbox Code Playgroud)
QQDefluviumLayer.m
- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context{
UIImage *myDefluvium = [UIImage imageNamed:@"delfluviumNewRotatedSmall.png"];
CGLayerRef layerCircle = CGLayerCreateWithContext(context, myDefluvium.size,NULL);
if (layerCircle)
{
CGContextRef layerContext = CGLayerGetContext(layerCircle);
CGContextDrawImage(layerContext, (CGRect){ CGPointZero, myDefluvium.size }, myDefluvium.CGImage);
CGContextDrawLayerInRect(context, CGRectMake(layer.bounds.origin.x,layer.bounds.origin.y, layer.bounds.size.width,layer.bounds.size.height), layerCircle);
CFRelease(layerCircle);
}
}
Run Code Online (Sandbox Code Playgroud)
QuickQuoteViewController.m
defluviumLayer=[[QQDefluviumLayer alloc] init];
[defluviumLayer setBounds:CGRectMake(0, 0, 61, 343)];
[defluviumLayer setPosition:CGPointMake(277,246)];
[self.view.layer addSublayer:defluviumLayer];
[defluviumLayer update];
candleStickLayer=[[QQCandleStickLayer alloc] init];
[candleStickLayer setBounds:CGRectMake(0,0, defluviumLayer.frame.size.width, defluviumLayer.frame.size.height)];
[candleStickLayer setPosition:CGPointMake(defluviumLayer.position.x,defluviumLayer.position.y)];
[self.view.layer addSublayer:candleStickLayer];
[candleStickLayer update];
Run Code Online (Sandbox Code Playgroud)
我正在绘制一个CALayer,并且在图像下面有图像,正如我测试的那样 - 如果我在清晰的白色视图上绘制 - 可以使用宽度1绘制线条,但不能在图像上绘制
ken*_*ytm 28
线宽确实是1像素宽,但一侧为0.5像素宽,另一侧为0.5像素宽.将其粘贴到像素网格上使得两侧的透明度为50像素,宽度为1像素,使其在不透明度为50%时为2像素宽线.
要避免这种情况,请在半像素坐标上绘制线条.
例如,而不是
CGContextMoveToPoint(ctx, 20.0f, 30.0f);
CGContextAddLineToPoint(ctx, 20.0f, 100.0f);
Run Code Online (Sandbox Code Playgroud)
做
CGContextMoveToPoint(ctx, 20.5f, 30.0f);
CGContextAddLineToPoint(ctx, 20.5f, 100.0f);
Run Code Online (Sandbox Code Playgroud)
flu*_*ang 23
像素点位于2像素之间,如KennyTM所说,默认情况下该线是去抗显示之前的Antialiased,因此它显示为width = 2.0,关闭Antialias也可以解决问题.
CGContextSetShouldAntialias(context, NO);
Run Code Online (Sandbox Code Playgroud)
我试过,对我来说很好.
| 归档时间: |
|
| 查看次数: |
7932 次 |
| 最近记录: |