Iphone CALayer的反锯齿对角边

Iphone CALayer的反锯齿对角边,iphone,ios,core-animation,calayer,antialiasing,Iphone,Ios,Core Animation,Calayer,Antialiasing,当我使用CATTransferM3dRotate设置CALayer的transform属性时,层会正确旋转。但是,层的边缘是锯齿状的,而不是抗锯齿的。我读过几篇关于这个主题的帖子: 我试图通过在对角线层上设置以下属性来结合他们的建议 CALayer* layer = myView.layer; layer.shadowOpacity = 0.01; layer.edgeAntialiasingMask = kCALayerTopEdge | kCALayerBottomEdge | kCAL

当我使用CATTransferM3dRotate设置CALayer的transform属性时,层会正确旋转。但是,层的边缘是锯齿状的,而不是抗锯齿的。我读过几篇关于这个主题的帖子:

我试图通过在对角线层上设置以下属性来结合他们的建议

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;
我还覆盖了对角线层的drawLayer:inContext:方法,以确保抗锯齿:

-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
    CGContextSetAllowsAntialiasing(context, true);
    CGContextSetShouldAntialias(context, true);
    CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
    CGContextFillRect(context, self.bounds);
}

我错过了什么

我刚刚发了一篇关于这张照片的帖子。也许会有帮助

我发现了一些有帮助的技巧,仅仅设置边界并没有达到我所认为的效果。您可以设置一些设置来帮助插值、光栅化和光栅化比例

查看此代码中的内容是否有帮助:

    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.allowsedgentialiasing=YES


有趣的是,官方CALayer文档中没有涉及到这一点,但它绝对是一个公共API。请参阅和Peter Steinberger的精彩评论。

这是我最喜欢的CA API。这在OSX上是不可能的:(
allowsEdgeAntialiasing
不可用。在OSX中如何做到这一点?在7.0和更高版本上有一个更好的替代方案。