所以我现在要做的是在调用CGLayerGetContext的CGContextRef中渲染一个路径.这是我正在做的基本概述:
// rect comes from the drawRect: methodlayer = CGLayerCreateWithContext(context,rect.size,NulL);layerContext = CGLayerGetContext(layer);CGContextSetlineCap(layerContext,kCGlineCapRound);// Set the line stylesCGContextSetlineJoin(layerContext,kCGlineJoinRound);CGContextSetlinewidth(layerContext,1.0);CGContextSetstrokecolorWithcolor(layerContext,[UIcolor blackcolor].CGcolor);// Create a mutable pathpath = CGPathCreateMutable();// Move to start point//...for (int i = 0; i < points.count; i++) { // compute controlPoint and anchorPoint //... CGPathAddQuadCurvetoPoint(path,nil,controlPoint.x,controlPoint.y,anchorPoint.x,anchorPoint.y);}// stroke the pathCGContextAddpath(layerContext,path);CGContextstrokePath(layerContext);// Add the layer to the main contextCGContextDrawLayerAtPoint(context,CGPointZero,layer);
现在,我获得了良好的性能绘图,但我的线条非常锯齿状,似乎没有消除锯齿.我试过添加
CGContextSetShouldAntialias(layerContext,YES);CGContextSetAllowsAntialiasing(layerContext,YES);CGContextSetInterpolationQuality(layerContext,kCGInterpolationHigh);
上面的代码无济于事.我甚至在主上下文中设置了抗锯齿属性,没有任何变化.我拍摄了相同代码结果的屏幕截图,但第二张图像是在CGLayer中从绘图中创建的图像.正如你所看到的,尽管是相同的代码,它实际上是锯齿状的,只是绘制成一个layerContext.如何让CGLayer中的线条流畅?
解决方法 我发现第二张图像没有消除锯齿的原因是因为没有任何反别名.背景是空的,因此抗锯齿不起作用.如果在视图的边界上创建一个完全透明的大矩形,则该线将使用消除锯齿进行绘制.然而,表现被杀死了.最好不要走这条路. 总结以上是内存溢出为你收集整理的iphone – CGLayer和抗锯齿CGPaths全部内容,希望文章能够帮你解决iphone – CGLayer和抗锯齿CGPaths所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)