Visualice una image o UIImage con una CALayer simple

A menudo he leído que el uso de un CALayer lugar de un UIImageView es un aumento de performance cuando se trata de un uso intensivo de imágenes. Eso tiene sentido, porque UIImageView provoca 3 copys de la image en la memory, lo que se necesita para Core Animation. Pero en mi caso no uso Core Animation.

¿Cómo puedo asignar un UIImage (o sus datos de image) a un CALayer y luego mostrarlo?

 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; 

o en un parque infantil Swift (tendrás que proporcionar tu propia image PNG en el file de resources del patio. Estoy usando el ejemplo de "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 👁 eye icon } 

Una imagen como el contenido de un CALayer incrustado en un UIView

La versión ARC requiere un reparto diferente:

 self.myView.layer.contents = (__bridge id) self.myImage.CGImage; 
 CALayer *layer = [[CALayer alloc] init]; layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"REWIFISocketOff"].CGImage);