CALayer: wat is het, kernconcepten en weergave van de laag

Auteur: IT Sectr Gepubliceerd: 2026-06-12 Leestijd: 10 min

CALayer — is de basisklasse van grafische lagen in iOS, onderdeel van het QuartzCore-framework. Elke UIView in iOS heeft een bijbehorende CALayer die zorgt voor weergave van content, animatie en compositie op de GPU. Volgens Apple QuartzCore Documentation, 2025 ondersteunt CALayer meer dan 40 animeerbare eigenschappen en werkt het rechtstreeks via Metal. Begrip van CALayer is essentieel voor het maken van vloeiende animaties en optimalisatie van de interfaceprestaties.

Belangrijkste punten

  • CALayer — de basisbouwsteen van visuele weergave in iOS, die rastering en compositie beheert.
  • Elke UIView bevat een laag die toegankelijk is via de eigenschap layer — ontwikkelaars kunnen het uiterlijk aanpassen zonder een UIView-subklasse te maken.
  • Core Animation gebruikt CALayer voor animatie van eigenschappen: position, bounds, opacity, transform, backgroundColor.
  • Subklassen van CALayer — CAShapeLayer, CATextLayer, CAGradientLayer, CAEmitterLayer — lossen specifieke weergavetaken op.
  • Weergave van CALayer gebeurt op de GPU via Metal, wat 60 FPS garandeert bij correcte configuratie van de laag.

Wat is CALayer?

CALayer — is een klasse uit het QuartzCore-framework die de rasterafbeelding van een rechthoekig gebied op het scherm beheert. Het slaat visuele eigenschappen op: frame, backgroundColor, opacity, shadow, border, transform. In tegenstelling tot UIView verwerkt CALayer geen aanraakgebeurtenissen, neemt het niet deel aan Auto Layout en heeft het geen levenscyclus van een view controller.

Architecturaal implementeert CALayer het Model-patroon in de context van Core Animation. De laag slaat de status van visuele eigenschappen op en Core Animation beheert de interpolatie tussen statussen tijdens de animatie. Deze scheiding maakt het mogelijk om willekeurige eigenschappen van de laag te animeren zonder dat de content opnieuw getekend hoeft te worden via drawRect.

Volgens Apple WWDC 2024 is CALayer herschreven om via Metal te werken. De moderne weergavepijplijn omvat drie fasen: Commit (bijwerken van eigenschappen op de CPU), Render (genereren van commando's voor de GPU op de CPU) en Composite (uitvoeren van commando's op de GPU). CALayer neemt aan alle drie de fasen deel en levert gegevens voor elk.

Elke laag kan sublayers bevatten — onderliggende lagen die boven de bovenliggende laag worden weergegeven. De hiërarchie van lagen herhaalt de UIView-hiërarchie, maar kan afzonderlijk bestaan. Ontwikkelaars kunnen lagen onafhankelijk van UIView maken via CALayer() en ze toevoegen aan de hiërarchie via addSublayer.

Verschil tussen CALayer en UIView

UIView — is een laag bovenop CALayer die het volgende toevoegt: verwerking van aanraking via UIResponder, deelname aan Auto Layout, weergave in storyboard, integratie met UIViewController. CALayer — is een lichtgewicht object dat zonder UIView kan worden gebruikt voor puur visuele elementen.

In de praktijk betekent dit dat als een element geen aanraking en layout nodig heeft, het als CALayer kan worden geïmplementeerd. Bijvoorbeeld achtergrondanimaties, laadindicatoren, decoratieve elementen — dit alles is efficiënter te implementeren via CALayer, waarbij de overhead van UIView wordt vermeden.

Basiseigenschappen van CALayer

Basiseigenschappen van CALayer omvatten frame, positionering, weergave en visuele effecten. frame bepaalt het rechthoekige gebied van de laag in de coördinaten van de ouder, bounds — interne coördinaten, position — het midden van de laag. Verandering van position wordt standaard geanimeerd via implicit animation.

  • backgroundColor — achtergrondkleur van de laag (CGColor). Het instellen van een ondoorzichtige kleur en opaque = true elimineert alfa-menging.
  • cornerRadius — afronding van hoeken. Hardwarematige verwerking zonder extra weergavepassen.
  • borderWidth en borderColor — rand van de laag. Wordt op de GPU weergegeven, vereist geen drawRect.
  • shadowOffset, shadowRadius, shadowOpacity, shadowPath — schaduw. Expliciete shadowPath versnelt de weergave aanzienlijk.
  • opacity — transparantie van de laag van 0.0 tot 1.0. Wordt geanimeerd zonder drawRect aan te roepen.
  • transform — CATransform3D voor 2D- en 3D-transformaties. Ondersteunt perspectivische vervormingen.

De eigenschap contents maakt het mogelijk om de rasterinhoud van de laag direct in te stellen — via CGImage of CIImage. Dit is een alternatief voor tekenen via drawRect: als de afbeelding al klaar is, kan deze in contents worden doorgegeven en Core Animation zal deze zonder verdere verwerking weergeven.

Voor animaties worden CABasicAnimation, CAKeyframeAnimation en CATransition gebruikt. Al deze klassen werken via sleutelpaden van CALayer-eigenschappen, waardoor vrijwel elk attribuut — van position tot transform.rotation.z — geanimeerd kan worden.

Subklassen van CALayer en hun doel

Apple biedt verschillende gespecialiseerde subklassen van CALayer, die elk een specifieke taak oplossen. Het kiezen van de juiste subklasse in plaats van de basis CALayer kan een aanzienlijke prestatieverbetering opleveren dankzij hardwareversnelling.

  • CAShapeLayer — tekenen van vectorvormen (CGPath) op de GPU. Vereist geen aparte buffer — de vorm wordt weergegeven als onderdeel van de compositie van de bovenliggende laag.
  • CATextLayer — weergave van tekst met subpixel-anti-aliasing. Cacht glyphs, wat de weergave van herhalende tekst versnelt.
  • CAGradientLayer — lineaire en radiale gradiënten. Hardwarematige weergave zonder het genereren van tussenliggende afbeeldingen.
  • CAEmitterLayer — deeltjessysteem op de GPU. Elk deeltje wordt weergegeven als afzonderlijk element zonder tussenkomst van de CPU.
  • CAReplicatorLayer — automatisch kopieën maken van onderliggende lagen met configureerbare verschuivingen in positie, kleur en tijd.
  • CATiledLayer — weergave van grote afbeeldingen in tegels. Laadt en toont alleen zichtbare fragmenten.

CAReplicatorLayer is bijzonder nuttig voor het maken van repetitieve patronen zonder codeduplicatie. Bijvoorbeeld een laadindicator van 10 punten wordt geïmplementeerd met één CAReplicatorLayer met instanceCount = 10 en een tijdsverschuiving instanceDelay voor de animatie.

Weergave en compositie van CALayer

Weergave van CALayer verloopt in drie fasen. Commit — bij het wijzigen van een eigenschap van de laag wordt op de CPU een pakket wijzigingen gevormd. Render — Core Animation genereert Metal-commando's op de CPU op basis van de eigenschappen van de laag. Composite — de GPU voert de commando's uit en toont het frame op het scherm. Het hele proces is gesynchroniseerd met de verversingssnelheid van het scherm.

Bij compositie van meerdere lagen voegt de GPU ze samen tot een uiteindelijk beeld, rekening houdend met transparantie, maskers en mengmodi. Als de laag opaque = true heeft, optimaliseert Core Animation de compositie: in plaats van alfa-menging wordt een eenvoudige pixelvervanging uitgevoerd, wat aanzienlijk sneller is.

Volgens Apple Performance Guidelines zijn de belangrijkste factoren die de weergave van CALayer vertragen: complexe hiërarchie van sublayers (meer dan 30 lagen op het scherm), gebruik van maskers (mask-eigenschap), automatische berekening van schaduw zonder shadowPath, overmatig gebruik van shouldRasterize voor dynamische lagen.

Het hulpmiddel Core Animation Instrument in XCode maakt het mogelijk om de weergavetijd van elke laag, het aantal offscreen-buffers en de frequentie van drawRect-aanroepen te controleren. Optimale weergavetijd voor 60 FPS — niet meer dan 8 ms op de CPU en 8 ms op de GPU.

Offscreen-weergave en de impact ervan

Offscreen-weergave — weergave van de laag in een tussenliggende buffer voordat deze op het scherm wordt getoond. Treedt op bij gebruik van cornerRadius + masksToBounds met content, groepsopacity, maskers en shouldRasterize. Elke offscreen-pass duurt 2–5 ms, daarom is overmatige offscreen-weergave kritisch voor de prestaties.

Voor diagnostiek van offscreen-weergave gebruikt u het hulpmiddel Color Offscreen-Rendered in Core Animation Instrument. Gele lagen — offscreen, blauwe — directe weergave op het scherm. Minimalisatie van offscreen-passes is de belangrijkste optimalisatietechniek in iOS.

Codevoorbeelden: werken met CALayer in Swift

Het eerste voorbeeld toont de basisconfiguratie van CALayer met het maken van een schaduw, afronding van hoeken en rand. shadowPath is expliciet ingesteld om de weergave te versnellen:

swift
import UIKit

func configureLayer(_ view: UIView) {
    let layer = view.layer
    layer.cornerRadius = 16
    layer.borderWidth = 2
    layer.borderColor = UIColor.systemBlue.cgColor
    layer.backgroundColor = UIColor.white.cgColor

    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOpacity = 0.2
    layer.shadowOffset = CGSize(width: 0, height: 4)
    layer.shadowRadius = 8
    layer.shadowPath = UIBezierPath(
        roundedRect: view.bounds,
        cornerRadius: layer.cornerRadius
    ).cgPath
}

Het tweede voorbeeld — animatie van transform via CABasicAnimation met een perspectivische 3D-transformatie. De rotatie-animatie rond de Y-as creëert een omkeereffect van de kaart:

swift
let flipAnimation = CABasicAnimation(keyPath: "transform")
var transform = CATransform3DIdentity
transform.m34 = -1.0 / 500.0
transform = CATransform3DRotate(transform, .pi, 0, 1, 0)
flipAnimation.toValue = NSValue(caTransform3D: transform)
flipAnimation.duration = 0.8
flipAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
cardLayer.add(flipAnimation, forKey: "flip")

Het derde voorbeeld — gebruik van CAGradientLayer voor het maken van een achtergrondgradiënt. De gradiënt wordt op de GPU weergegeven en vereist geen extra bronnen bij het wijzigen van afmetingen:

swift
func addGradient(to view: UIView, colors: [UIColor]) {
    let gradient = CAGradientLayer()
    gradient.colors = colors.map { $0.cgColor }
    gradient.locations = [0.0, 0.5, 1.0]
    gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
    gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
    gradient.frame = view.bounds
    view.layer.insertSublayer(gradient, at: 0)
}

Veelgestelde vragen

Waarin verschilt CALayer van UIView?

UIView — is een laag bovenop CALayer die aanraakverwerking, Auto Layout en integratie met UIViewController toevoegt. CALayer werkt alleen met visuele weergave en animatie, waardoor het lichter en efficiënter is voor puur grafische taken.

Welke eigenschappen van CALayer worden geanimeerd zonder extra code?

Meer dan 40 eigenschappen, waaronder position, bounds, frame, opacity, backgroundColor, cornerRadius, transform, shadowOffset, shadowRadius, borderWidth en borderColor. De animatie start automatisch bij het wijzigen van de eigenschap binnen het animatieblok UIView.animate.

Hoe kan ik de weergave van CALayer-schaduw versnellen?

Stel shadowPath in — een expliciete schaduwcontour in de vorm van UIBezierPath. Zonder shadowPath analyseert Core Animation het alfa-kanaal van de content om de schaduwvorm te berekenen, wat een extra pass vereist. Met shadowPath wordt de schaduw weergegeven als een eenvoudige geometrische figuur zonder analyse van de content.

Wat is implicit animation in CALayer?

Implicit animation — automatische animatie bij het wijzigen van een animeerbare eigenschap van CALayer buiten het UIView.animate-blok. Standaard duur — 0,25 seconden. Kan worden uitgeschakeld via CATransaction.setDisableActions(true) of een eigen duur worden ingesteld via CATransaction.begin/commit.

Wanneer gebruik ik CAShapeLayer in plaats van CALayer?

CAShapeLayer is efficiënter wanneer een vectorvorm moet worden weergegeven — lijn, cirkel, veelhoek, complexe contour. Het rendert het pad op de GPU zonder een aparte rasterbuffer te maken. De basis CALayer is geschikt voor rechthoekige gebieden met achtergrond, rand en schaduw.

Samenvatting

  • CALayer — de basisklasse van grafische lagen in iOS, verantwoordelijk voor weergave, animatie en compositie via Core Animation.
  • Elke UIView bevat een CALayer, maar de laag kan afzonderlijk worden gebruikt voor visuele elementen zonder aanraakverwerking.
  • Basiseigenschappen: frame, bounds, backgroundColor, cornerRadius, shadowPath, transform, opacity — allemaal animeerbaar.
  • Gespecialiseerde subklassen: CAShapeLayer, CATextLayer, CAGradientLayer, CAEmitterLayer, CAReplicatorLayer.
  • Weergave verloopt in drie fasen: Commit, Render, Composite — allemaal op de GPU via Metal.
  • Offscreen-weergave treedt op bij maskers, shouldRasterize en groepsopacity — minimaliseer het voor 60 FPS.
  • Expliciete shadowPath versnelt de schaduwweergave 2–3 keer in vergelijking met automatische berekening.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook