Anti-alias diagonal edges of CALayer

前端 未结 2 1979
轻奢々
轻奢々 2020-12-28 19:05

When I set the transform property of my CALayer with a CATransform3DRotate, the layer is properly rotated. However, the edges of the layer are jagged and not anti-aliased. I

相关标签:
2条回答
  • 2020-12-28 19:30

    I just did a post on this for images. Maybe it will help.

    I found a few tricks that help and setting just a border did not do what I thought it would. What you can do is set a few settings to help with interpolation, rasterizing, and the rasterisationScale.

    See if something from this code helps:

        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;
    

    I have some examples posted here

    0 讨论(0)
  • 2020-12-28 19:39

    As of iOS7, this is now finally possible on a per-layer basis and without any ugly hacks like transparent pixels or workarounds like rasterization:

    layer.allowsEdgeAntialiasing = YES;

    Interestingly, this is not covered by the official CALayer documentation, but is definitely a public API. See the iOS7 API diffs and Peter Steinberger's great write-up on Hidden Gems and Workarounds in iOS7.

    0 讨论(0)
提交回复
热议问题