CALayer的抗混叠对angular线边缘
当我使用CATransform3DRotate设置我的CALayer的transform属性时,图层被正确旋转。 但是,图层的边缘是锯齿状的,而不是反锯齿的。 我已经阅读了关于这个主题的几个post:
iPhone:CALayer +旋转3D +抗锯齿?
iPhone – 在将视angular应用于CALayer时变得粗糙
我试图通过在我的对angular线图层上设置以下属性来纳入他们的build议
CALayer* layer = myView.layer; layer.shadowOpacity = 0.01; layer.edgeAntialiasingMask = kCALayerTopEdge | kCALayerBottomEdge | kCALayerRightEdge | kCALayerLeftEdge; layer.borderWidth = 1.0; layer.borderColor = [UIColor clearColor].CGColor; layer.backgroundColor = [UIColor greenColor].CGColor;
我也重写了我的对angular层的drawLayer:inContext:方法来确保抗锯齿:
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context { CGContextSetAllowsAntialiasing(context, true); CGContextSetShouldAntialias(context, true); CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor); CGContextFillRect(context, self.bounds); }
我错过了什么?
我只是在图片上做了一个post。 也许这会有所帮助。
我发现了一些帮助和设置一个边界的技巧没有做我认为会的。 你可以做的是设置一些设置来帮助插值,栅格化和栅格化比例。
看看这段代码是否有帮助:
UIImage * img =[UIImage imageWithData:[NSData dataWithContentsOfFile:[[[NSBundle mainBundle ] resourcePath ] stringByAppendingPathComponent:@"AliasImage.png" ] ] ]; CGRect imageRect = CGRectMake( 0 , 0 , img.size.width + 4 , img.size.height + 4 ); UIGraphicsBeginImageContext( imageRect.size ); [img drawInRect:CGRectMake( imageRect.origin.x + 2 , imageRect.origin.y + 2 , imageRect.size.width - 4 , imageRect.size.height - 4 ) ]; CGContextSetInterpolationQuality( UIGraphicsGetCurrentContext() , kCGInterpolationHigh ); img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [aliasImage setImage:img ]; aliasImage.transform = CGAffineTransformScale(aliasImage.transform , 0.45 , 0.45 ); aliasImage.layer.shouldRasterize = YES; aliasImage.layer.rasterizationScale = 0.45; aliasImage.layer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge; aliasImage.clipsToBounds = NO; aliasImage.layer.masksToBounds = NO;
我在这里张贴了一些例子
从iOS7开始,现在终于可以在每层的基础上实现了,而且没有像透明像素或者光栅化这样的解决方法,
layer.allowsEdgeAntialiasing = YES;
有趣的是,这并不包含在官方的CALayer文档中,但绝对是一个公共的API。 请参阅iOS7 API差异和Peter Steinberger 在iOS7中关于隐藏gem和解决方法的精彩文章 。