{"abstract":[{"text":"A class your Metal app uses to register for callbacks to synchronize its animations for a display.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/com.apple.documentation\/documentation\/technologies","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink"},"kind":"symbol","legalNotices":{"copyright":"Copyright &copy; 2026 Apple Inc. All rights reserved.","privacyPolicy":"https:\/\/www.apple.com\/privacy\/privacy-policy","termsOfUse":"https:\/\/www.apple.com\/legal\/internet-services\/terms\/site.html"},"metadata":{"availableLanguages":["de-DE","en-US","es-419","fr-FR","it-IT","ja-JP","ko-KR","pt-BR","zh-CN"],"externalID":"c:objc(cs)CAMetalDisplayLink","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalDisplayLink"}],"modules":[{"name":"Core Animation"}],"navigatorTitle":[{"kind":"identifier","text":"CAMetalDisplayLink"}],"platforms":[{"introducedAt":"17.0","name":"iOS"},{"introducedAt":"17.0","name":"iPadOS"},{"introducedAt":"17.0","name":"Mac Catalyst"},{"introducedAt":"14.0","name":"macOS"},{"introducedAt":"17.0","name":"tvOS"},{"introducedAt":"1.0","name":"visionOS"}],"role":"symbol","roleHeading":"Class","symbolKind":"class","title":"CAMetalDisplayLink"},"primaryContentSections":[{"declarations":[{"languages":["swift"],"platforms":["iOS","iPadOS","Mac Catalyst","macOS","tvOS","visionOS"],"tokens":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalDisplayLink"}]}],"kind":"declarations"},{"content":[{"anchor":"overview","level":2,"text":"Overview","type":"heading"},{"inlineContent":[{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink","isActive":true,"type":"reference"},{"text":" instances are a specialized way to interact with variable-rate displays when you need more control over the timing window to render your app’s frames. Controlling the timing window and rendering delay for frames can help you achieve smoother frame rates and avoid visual artifacts.","type":"text"}],"type":"paragraph"},{"content":[{"inlineContent":[{"text":"","type":"text"},{"text":" ","type":"text"},{"text":"When working with less visually intensive apps or apps which don’t use Metal, use ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CADisplayLink","isActive":true,"type":"reference"},{"text":" to handle variable refresh rates.","type":"text"}],"type":"paragraph"}],"name":"Tip","style":"tip","type":"aside"},{"inlineContent":[{"text":"Your app initializes a new Metal display link by providing a target ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalLayer","isActive":true,"type":"reference"},{"text":". Set this instance’s ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate","isActive":true,"type":"reference"},{"text":" property to an implementation that encodes the rendering work for Metal to perform. With a set delegate, synchronize the display with a run loop to perform rendering on by calling the ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/add(to:forMode:)","isActive":true,"type":"reference"},{"text":" method.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Once you associate the display link with a run loop, the system calls the delegate’s ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLinkDelegate\/metalDisplayLink(_:needsUpdate:)","isActive":true,"type":"reference"},{"text":" method to request new frames. This method receives update requests based on the ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameRateRange","isActive":true,"type":"reference"},{"text":" and ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","isActive":true,"type":"reference"},{"text":" of the display link. The system makes a best effort to make callbacks at appropriate times. Your app should complete any commits to the Metal device’s ","type":"text"},{"identifier":"doc:\/\/com.apple.documentation\/documentation\/Metal\/MTLCommandQueue","isActive":true,"type":"reference"},{"text":" for rendering the display layer before calling ","type":"text"},{"identifier":"doc:\/\/com.apple.documentation\/documentation\/Metal\/MTLDrawable\/present()","isActive":true,"type":"reference"},{"text":" on a drawable element.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"Your app can disable notifications by setting ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/isPaused","isActive":true,"type":"reference"},{"text":" to ","type":"text"},{"code":"true","type":"codeVoice"},{"text":". When your app finishes with a display link, call ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/invalidate()","isActive":true,"type":"reference"},{"text":"to remove it from all run loops and the target.","type":"text"}],"type":"paragraph"}],"kind":"content"}],"relationshipsSections":[{"identifiers":["doc:\/\/com.apple.documentation\/documentation\/ObjectiveC\/NSObject-swift.class"],"kind":"relationships","title":"Inherits From","type":"inheritsFrom"},{"identifiers":["doc:\/\/com.apple.documentation\/documentation\/Swift\/CVarArg","doc:\/\/com.apple.documentation\/documentation\/Swift\/CustomDebugStringConvertible","doc:\/\/com.apple.documentation\/documentation\/Swift\/CustomStringConvertible","doc:\/\/com.apple.documentation\/documentation\/Swift\/Equatable","doc:\/\/com.apple.documentation\/documentation\/Swift\/Hashable","doc:\/\/com.apple.documentation\/documentation\/ObjectiveC\/NSObjectProtocol"],"kind":"relationships","title":"Conforms To","type":"conformsTo"}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"seeAlsoSections":[{"anchor":"Animation-Timing","generated":true,"identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CACurrentMediaTime()","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMediaTimingFunction","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMediaTiming","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CADisplayLink","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/Update","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLinkDelegate"],"title":"Animation Timing"}],"topicSections":[{"anchor":"Creating-a-Display-Link","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/init(metalLayer:)"],"title":"Creating a Display Link"},{"anchor":"Configuring-a-Display-Link","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameRateRange","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate"],"title":"Configuring a Display Link"},{"anchor":"Registering-for-Callbacks","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/add(to:forMode:)"],"title":"Registering for Callbacks"},{"anchor":"Pausing-Callbacks","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/isPaused"],"title":"Pausing Callbacks"},{"anchor":"Deregistering-for-callbacks","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/remove(from:forMode:)","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/invalidate()"],"title":"Deregistering for callbacks"},{"anchor":"Classes","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/Update"],"title":"Classes"}],"variants":[{"paths":["\/documentation\/quartzcore\/cametaldisplaylink"],"traits":[{"interfaceLanguage":"swift"}]},{"paths":["\/documentation\/quartzcore\/cametaldisplaylink"],"traits":[{"interfaceLanguage":"occ"}]}],"references":{"doc://com.apple.documentation/documentation/Metal/MTLCommandQueue":{"abstract":[{"text":"An instance you use to create, submit, and schedule command buffers to a specific GPU device to run the commands within those buffers.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"MTLCommandQueue"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Metal\/MTLCommandQueue","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"MTLCommandQueue"}],"role":"symbol","title":"MTLCommandQueue","type":"topic","url":"\/documentation\/metal\/mtlcommandqueue"},"doc://com.apple.documentation/documentation/Metal/MTLDrawable/present()":{"abstract":[{"text":"Presents the drawable onscreen as soon as possible.","type":"text"}],"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"present"},{"kind":"text","text":"()"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Metal\/MTLDrawable\/present()","kind":"symbol","role":"symbol","title":"present()","type":"topic","url":"\/documentation\/metal\/mtldrawable\/present()"},"doc://com.apple.documentation/documentation/ObjectiveC/NSObject-swift.class":{"abstract":[{"text":"The root class of most Objective-C class hierarchies, from which subclasses inherit a basic interface to the runtime system and the ability to behave as Objective-C objects.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"NSObject"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/ObjectiveC\/NSObject-swift.class","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"NSObject"}],"role":"symbol","title":"NSObject","type":"topic","url":"\/documentation\/objectivec\/nsobject-swift.class"},"doc://com.apple.documentation/documentation/ObjectiveC/NSObjectProtocol":{"abstract":[{"text":"The group of methods that are fundamental to all Objective-C objects.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"NSObjectProtocol"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/ObjectiveC\/NSObjectProtocol","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"NSObjectProtocol"}],"role":"symbol","title":"NSObjectProtocol","type":"topic","url":"\/documentation\/objectivec\/nsobjectprotocol"},"doc://com.apple.documentation/documentation/Swift/CVarArg":{"abstract":[{"text":"A type whose instances can be encoded, and appropriately passed, as","type":"text"},{"text":" ","type":"text"},{"text":"elements of a C ","type":"text"},{"code":"va_list","type":"codeVoice"},{"text":".","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CVarArg"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Swift\/CVarArg","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CVarArg"}],"role":"symbol","title":"CVarArg","type":"topic","url":"\/documentation\/swift\/cvararg"},"doc://com.apple.documentation/documentation/Swift/CustomDebugStringConvertible":{"abstract":[{"text":"A type with a customized textual representation suitable for debugging","type":"text"},{"text":" ","type":"text"},{"text":"purposes.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CustomDebugStringConvertible"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Swift\/CustomDebugStringConvertible","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CustomDebugStringConvertible"}],"role":"symbol","title":"CustomDebugStringConvertible","type":"topic","url":"\/documentation\/swift\/customdebugstringconvertible"},"doc://com.apple.documentation/documentation/Swift/CustomStringConvertible":{"abstract":[{"text":"A type with a customized textual representation.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CustomStringConvertible"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Swift\/CustomStringConvertible","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CustomStringConvertible"}],"role":"symbol","title":"CustomStringConvertible","type":"topic","url":"\/documentation\/swift\/customstringconvertible"},"doc://com.apple.documentation/documentation/Swift/Equatable":{"abstract":[{"text":"A type that can be compared for value equality.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"Equatable"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Swift\/Equatable","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Equatable"}],"role":"symbol","title":"Equatable","type":"topic","url":"\/documentation\/swift\/equatable"},"doc://com.apple.documentation/documentation/Swift/Hashable":{"abstract":[{"text":"A type that can be hashed into a ","type":"text"},{"code":"Hasher","type":"codeVoice"},{"text":" to produce an integer hash value.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"Hashable"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/Swift\/Hashable","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Hashable"}],"role":"symbol","title":"Hashable","type":"topic","url":"\/documentation\/swift\/hashable"},"doc://com.apple.documentation/documentation/technologies":{"abstract":[],"identifier":"doc:\/\/com.apple.documentation\/documentation\/technologies","kind":"technologies","role":"overview","title":"Technologies","type":"topic","url":"\/documentation\/technologies"},"doc://com.apple.quartzcore/documentation/QuartzCore":{"abstract":[{"text":"Render, compose, and animate visual elements.","type":"text"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore","kind":"symbol","navigatorTitle":[{"kind":"text","text":"Core Animation"}],"role":"collection","title":"Core Animation","type":"topic","url":"\/documentation\/quartzcore"},"doc://com.apple.quartzcore/documentation/QuartzCore/CACurrentMediaTime()":{"abstract":[{"text":"Returns the current absolute time, in seconds.","type":"text"}],"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CACurrentMediaTime"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","preciseIdentifier":"c:@T@CFTimeInterval","text":"CFTimeInterval"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CACurrentMediaTime()","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CACurrentMediaTime"}],"role":"symbol","title":"CACurrentMediaTime()","type":"topic","url":"\/documentation\/quartzcore\/cacurrentmediatime()"},"doc://com.apple.quartzcore/documentation/QuartzCore/CADisplayLink":{"abstract":[{"text":"A timer object that allows your app to synchronize its drawing to the refresh rate of the display.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisplayLink"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CADisplayLink","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CADisplayLink"}],"role":"symbol","title":"CADisplayLink","type":"topic","url":"\/documentation\/quartzcore\/cadisplaylink"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMediaTiming":{"abstract":[{"text":"Methods that model a hierarchical timing system, allowing objects to map time between their parent and local time.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMediaTiming"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMediaTiming","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAMediaTiming"}],"role":"symbol","title":"CAMediaTiming","type":"topic","url":"\/documentation\/quartzcore\/camediatiming"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMediaTimingFunction":{"abstract":[{"text":"A function that defines the pacing of an animation as a timing curve.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMediaTimingFunction"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMediaTimingFunction","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAMediaTimingFunction"}],"role":"symbol","title":"CAMediaTimingFunction","type":"topic","url":"\/documentation\/quartzcore\/camediatimingfunction"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink":{"abstract":[{"text":"A class your Metal app uses to register for callbacks to synchronize its animations for a display.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalDisplayLink"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAMetalDisplayLink"}],"role":"symbol","title":"CAMetalDisplayLink","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/Update":{"abstract":[{"text":"Stores information about a single update from a Metal display link instance.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Update"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/Update","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Update"}],"role":"symbol","title":"CAMetalDisplayLink.Update","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/update"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/add(to:forMode:)":{"abstract":[{"text":"Registers the display link with a run loop.","type":"text"}],"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"add"},{"kind":"text","text":"("},{"kind":"externalParam","text":"to"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)NSRunLoop","text":"RunLoop"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forMode"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)NSRunLoop","text":"RunLoop"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"c:@T@NSRunLoopMode","text":"Mode"},{"kind":"text","text":")"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/add(to:forMode:)","kind":"symbol","navigatorTitle":[{"kind":"text","text":"- "},{"kind":"identifier","text":"addToRunLoop:forMode:"}],"role":"symbol","title":"add(to:forMode:)","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/add(to:formode:)"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/delegate":{"abstract":[{"text":"An instance of a type your app implements that responds to the system’s callbacks.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"delegate"},{"kind":"text","text":": (any "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(pl)CAMetalDisplayLinkDelegate","text":"CAMetalDisplayLinkDelegate"},{"kind":"text","text":")?"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"delegate"}],"role":"symbol","title":"delegate","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/delegate"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/init(metalLayer:)":{"abstract":[{"text":"Creates a display link for Metal from a Core Animation layer.","type":"text"}],"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"metalLayer"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CAMetalLayer","text":"CAMetalLayer"},{"kind":"text","text":")"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/init(metalLayer:)","kind":"symbol","navigatorTitle":[{"kind":"text","text":"- "},{"kind":"identifier","text":"initWithMetalLayer:"}],"role":"symbol","title":"init(metalLayer:)","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/init(metallayer:)"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/invalidate()":{"abstract":[{"text":"Removes the display link from all run loops for all modes.","type":"text"}],"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"invalidate"},{"kind":"text","text":"()"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/invalidate()","kind":"symbol","navigatorTitle":[{"kind":"text","text":"- "},{"kind":"identifier","text":"invalidate"}],"role":"symbol","title":"invalidate()","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/invalidate()"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/isPaused":{"abstract":[{"text":"A Boolean value that indicates whether the system suspends the display link’s notifications to the target.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"isPaused"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/isPaused","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"paused"}],"role":"symbol","title":"isPaused","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/ispaused"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/preferredFrameLatency":{"abstract":[{"text":"The amount of time, in frames, your app requests to render a frame.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameLatency"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sf","text":"Float"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"preferredFrameLatency"}],"role":"symbol","title":"preferredFrameLatency","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/preferredframelatency"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/preferredFrameRateRange":{"abstract":[{"text":"A range of frequencies your app allows for frame updates, affecting how often the system invokes your delegate’s callback.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameRateRange"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:@S@CAFrameRateRange","text":"CAFrameRateRange"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameRateRange","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"preferredFrameRateRange"}],"role":"symbol","title":"preferredFrameRateRange","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/preferredframeraterange"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/remove(from:forMode:)":{"abstract":[{"text":"Removes a mode’s display link from a run loop.","type":"text"}],"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"remove"},{"kind":"text","text":"("},{"kind":"externalParam","text":"from"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)NSRunLoop","text":"RunLoop"},{"kind":"text","text":", "},{"kind":"externalParam","text":"forMode"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)NSRunLoop","text":"RunLoop"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"c:@T@NSRunLoopMode","text":"Mode"},{"kind":"text","text":")"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/remove(from:forMode:)","kind":"symbol","navigatorTitle":[{"kind":"text","text":"- "},{"kind":"identifier","text":"removeFromRunLoop:forMode:"}],"role":"symbol","title":"remove(from:forMode:)","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/remove(from:formode:)"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLinkDelegate":{"abstract":[{"text":"A protocol your app implements to respond to callbacks from Core Animation for a Metal display link.","type":"text"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalDisplayLinkDelegate"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLinkDelegate","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAMetalDisplayLinkDelegate"}],"role":"symbol","title":"CAMetalDisplayLinkDelegate","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylinkdelegate"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLinkDelegate/metalDisplayLink(_:needsUpdate:)":{"abstract":[{"text":"A method the system calls to notify your app when it plans to update the display.","type":"text"}],"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"metalDisplayLink"},{"kind":"text","text":"("},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CAMetalDisplayLink","text":"CAMetalDisplayLink"},{"kind":"text","text":", "},{"kind":"externalParam","text":"needsUpdate"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CAMetalDisplayLink","text":"CAMetalDisplayLink"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CAMetalDisplayLinkUpdate","text":"Update"},{"kind":"text","text":")"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLinkDelegate\/metalDisplayLink(_:needsUpdate:)","kind":"symbol","navigatorTitle":[{"kind":"text","text":"- "},{"kind":"identifier","text":"metalDisplayLink:needsUpdate:"}],"required":true,"role":"symbol","title":"metalDisplayLink(_:needsUpdate:)","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylinkdelegate\/metaldisplaylink(_:needsupdate:)"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalLayer":{"abstract":[{"text":"A Core Animation layer that Metal can render into, typically displayed onscreen.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalLayer"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalLayer","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAMetalLayer"}],"role":"symbol","title":"CAMetalLayer","type":"topic","url":"\/documentation\/quartzcore\/cametallayer"}},"variantOverrides":[{"patch":[{"op":"replace","path":"\/identifier\/interfaceLanguage","value":"occ"},{"op":"replace","path":"\/metadata\/platforms","value":[{"introducedAt":"17.0","name":"iOS"},{"introducedAt":"17.0","name":"iPadOS"},{"introducedAt":"17.0","name":"Mac Catalyst"},{"introducedAt":"14.0","name":"macOS"},{"introducedAt":"17.0","name":"tvOS"},{"introducedAt":"1.0","name":"visionOS"}]},{"op":"replace","path":"\/metadata\/roleHeading","value":"Class"},{"op":"replace","path":"\/metadata\/title","value":"CAMetalDisplayLink"},{"op":"replace","path":"\/metadata\/symbolKind","value":"class"},{"op":"replace","path":"\/metadata\/fragments","value":[{"kind":"identifier","text":"CAMetalDisplayLink"}]},{"op":"replace","path":"\/metadata\/navigatorTitle","value":[{"kind":"identifier","text":"CAMetalDisplayLink"}]},{"op":"replace","path":"\/hierarchy","value":{"paths":[["doc:\/\/com.apple.documentation\/documentation\/technologies","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore"]]}},{"op":"replace","path":"\/topicSections","value":[{"anchor":"Creating-a-Display-Link","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/init(metalLayer:)"],"title":"Creating a Display Link"},{"anchor":"Configuring-a-Display-Link","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameRateRange","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate"],"title":"Configuring a Display Link"},{"anchor":"Registering-for-Callbacks","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/add(to:forMode:)"],"title":"Registering for Callbacks"},{"anchor":"Pausing-Callbacks","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/isPaused"],"title":"Pausing Callbacks"},{"anchor":"Deregistering-for-callbacks","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/remove(from:forMode:)","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/invalidate()"],"title":"Deregistering for callbacks"},{"anchor":"Classes","identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/Update"],"title":"Classes"}]},{"op":"replace","path":"\/relationshipsSections","value":[{"identifiers":["doc:\/\/com.apple.documentation\/documentation\/ObjectiveC\/NSObject-swift.class"],"kind":"relationships","title":"Inherits From","type":"inheritsFrom"}]},{"op":"replace","path":"\/seeAlsoSections","value":[{"anchor":"Animation-Timing","generated":true,"identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CACurrentMediaTime()","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMediaTimingFunction","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMediaTiming","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CADisplayLink","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/Update","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLinkDelegate"],"title":"Animation Timing"}]},{"op":"replace","path":"\/primaryContentSections\/0","value":{"declarations":[{"languages":["occ"],"platforms":["iOS","iPadOS","Mac Catalyst","macOS","tvOS","visionOS"],"tokens":[{"kind":"keyword","text":"@interface"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalDisplayLink"},{"kind":"text","text":" : "},{"identifier":"doc:\/\/com.apple.documentation\/documentation\/ObjectiveC\/NSObject-swift.class","kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)NSObject","text":"NSObject"}]}],"kind":"declarations"}},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1Metal~1MTLCommandQueue\/fragments","value":[{"kind":"identifier","text":"MTLCommandQueue"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1Metal~1MTLDrawable~1present()\/title","value":"present"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1Metal~1MTLDrawable~1present()\/fragments","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"present"}]},{"op":"add","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1Metal~1MTLDrawable~1present()\/navigatorTitle","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"present"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1ObjectiveC~1NSObject-swift.class\/fragments","value":[{"kind":"identifier","text":"NSObject"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1ObjectiveC~1NSObjectProtocol\/title","value":"NSObject"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1ObjectiveC~1NSObjectProtocol\/fragments","value":[{"kind":"identifier","text":"NSObject"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1ObjectiveC~1NSObjectProtocol\/navigatorTitle","value":[{"kind":"identifier","text":"NSObject"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CACurrentMediaTime()\/title","value":"CACurrentMediaTime"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CACurrentMediaTime()\/fragments","value":[{"kind":"identifier","text":"CACurrentMediaTime"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CADisplayLink\/title","value":"CADisplayLink"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CADisplayLink\/fragments","value":[{"kind":"identifier","text":"CADisplayLink"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CADisplayLink\/navigatorTitle","value":[{"kind":"identifier","text":"CADisplayLink"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMediaTiming\/title","value":"CAMediaTiming"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMediaTiming\/fragments","value":[{"kind":"identifier","text":"CAMediaTiming"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMediaTiming\/navigatorTitle","value":[{"kind":"identifier","text":"CAMediaTiming"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMediaTimingFunction\/title","value":"CAMediaTimingFunction"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMediaTimingFunction\/fragments","value":[{"kind":"identifier","text":"CAMediaTimingFunction"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMediaTimingFunction\/navigatorTitle","value":[{"kind":"identifier","text":"CAMediaTimingFunction"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink\/title","value":"CAMetalDisplayLink"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink\/fragments","value":[{"kind":"identifier","text":"CAMetalDisplayLink"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink\/navigatorTitle","value":[{"kind":"identifier","text":"CAMetalDisplayLink"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1Update\/title","value":"CAMetalDisplayLinkUpdate"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1Update\/fragments","value":[{"kind":"identifier","text":"CAMetalDisplayLinkUpdate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1Update\/navigatorTitle","value":[{"kind":"identifier","text":"CAMetalDisplayLinkUpdate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1add(to:forMode:)\/title","value":"addToRunLoop:forMode:"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1add(to:forMode:)\/fragments","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"addToRunLoop:forMode:"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1delegate\/title","value":"delegate"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1delegate\/fragments","value":[{"kind":"identifier","text":"delegate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1init(metalLayer:)\/title","value":"initWithMetalLayer:"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1init(metalLayer:)\/fragments","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"initWithMetalLayer:"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1invalidate()\/title","value":"invalidate"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1invalidate()\/fragments","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"invalidate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1isPaused\/title","value":"paused"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1isPaused\/fragments","value":[{"kind":"identifier","text":"paused"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameLatency\/title","value":"preferredFrameLatency"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameLatency\/fragments","value":[{"kind":"identifier","text":"preferredFrameLatency"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameRateRange\/title","value":"preferredFrameRateRange"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameRateRange\/fragments","value":[{"kind":"identifier","text":"preferredFrameRateRange"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1remove(from:forMode:)\/title","value":"removeFromRunLoop:forMode:"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1remove(from:forMode:)\/fragments","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"removeFromRunLoop:forMode:"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLinkDelegate\/title","value":"CAMetalDisplayLinkDelegate"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLinkDelegate\/fragments","value":[{"kind":"identifier","text":"CAMetalDisplayLinkDelegate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLinkDelegate\/navigatorTitle","value":[{"kind":"identifier","text":"CAMetalDisplayLinkDelegate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLinkDelegate~1metalDisplayLink(_:needsUpdate:)\/title","value":"metalDisplayLink:needsUpdate:"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLinkDelegate~1metalDisplayLink(_:needsUpdate:)\/fragments","value":[{"kind":"text","text":"- "},{"kind":"identifier","text":"metalDisplayLink:needsUpdate:"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalLayer\/title","value":"CAMetalLayer"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalLayer\/fragments","value":[{"kind":"identifier","text":"CAMetalLayer"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalLayer\/navigatorTitle","value":[{"kind":"identifier","text":"CAMetalLayer"}]}],"traits":[{"interfaceLanguage":"occ"}]}]}