Display an image or UIImage with a plain CALayer

后端 未结 3 1981
执笔经年
执笔经年 2020-12-13 03:12

I\'ve often read that using a CALayer rather than a UIImageView is an performance boost when it comes to heavy image usage. That makes sense, becau

相关标签:
3条回答
  • 2020-12-13 03:30

    ARC version requires a different cast:

    self.myView.layer.contents = (__bridge id) self.myImage.CGImage;
    
    0 讨论(0)
  • 2020-12-13 03:31
    UIImage*    backgroundImage = [UIImage imageNamed:kBackName];
    CALayer*    aLayer = [CALayer layer];
    CGFloat nativeWidth = CGImageGetWidth(backgroundImage.CGImage);
    CGFloat nativeHeight = CGImageGetHeight(backgroundImage.CGImage);
    CGRect      startFrame = CGRectMake(0.0, 0.0, nativeWidth, nativeHeight);
    aLayer.contents = (id)backgroundImage.CGImage;
    aLayer.frame = startFrame;
    

    or in a Swift playground (you will have to provide your own PNG image in the Playground's resource file. I'm using the example of "FrogAvatar".)

      //: Playground - noun: a place where people can play
    import UIKit
    
    if let backgroundImage = UIImage(named: "FrogAvatar") // you will have to provide your own image in your playground's Resource file
    {
        let height = backgroundImage.size.height
        let width = backgroundImage.size.width
    
        let aLayer = CALayer()
        let startFrame = CGRect(x: 0, y: 0, width: width, height: height)
    
        let aView = UIView(frame: startFrame)
        aLayer.frame = startFrame
        aLayer.contentsScale = aView.contentScaleFactor
        aLayer.contents = backgroundImage.cgImage
        aView.layer.addSublayer(aLayer)
        aView // look at this via the Playground's                                                                     
    0 讨论(0)
  • 2020-12-13 03:42
    CALayer *layer = [[CALayer alloc] init];
    layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"REWIFISocketOff"].CGImage);
    
    0 讨论(0)
提交回复
热议问题