     #elseif os(macOS)
 
     private func handle(result: Result<ImageResponse, ImagePipeline.Error>, fromMemCache: Bool, options: ImageLoadingOptions) {
-        // NSImageView doesn't support content mode, unfortunately.
         switch result {
         case let .success(response):
-            display(response.container, options.transition, fromMemCache)
+            display(response.container, fromMemCache, .success)
         case .failure:
             if let failureImage = options.failureImage {
-                display(ImageContainer(image: failureImage), options.failureImageTransition, fromMemCache)
+                display(ImageContainer(image: failureImage), fromMemCache, .failure)
             }
         }
         self.task = nil
     }
 
     private func handle(partialImage response: ImageResponse, options: ImageLoadingOptions) {
-        display(response.container, options.transition, options.alwaysTransition, false)
-    }
-
-    private func display(_ image: ImageContainer, _ transition: ImageLoadingOptions.Transition?, _ fromMemCache: Bool, _ response: ImageLoadingOptions.ResponseType) {
+        display(response.container, false, .success)
+    }
+
+    private func display(_ image: ImageContainer, _ fromMemCache: Bool, _ response: ImageLoadingOptions.ResponseType) {
         guard let imageView = imageView else {
             return
         }
 
-        if !fromMemCache || options.alwaysTransition, let transition = transition {
+        if !fromMemCache || options.alwaysTransition, let transition = options.transition(for: response) {
             switch transition.style {
             case let .fadeIn(params):
                 runFadeInTransition(image: image, params: params)

            imageView.tintColor = tintColor
        }

        if !fromMemCache || options.alwaysTransition, let transition = transition {
            switch transition.style {
            case let .fadeIn(params):
                runFadeInTransition(image: image, params: params, contentMode: options.contentMode(for: response))

    private func handle(result: Result<ImageResponse, ImagePipeline.Error>, fromMemCache: Bool, options: ImageLoadingOptions) {
        switch result {
        case let .success(response):
            display(response.container, fromMemCache, .success)
        case .failure:
            if let failureImage = options.failureImage {
                display(ImageContainer(image: failureImage), fromMemCache, .failure)
            }
        }
        self.task = nil
    }

    private func handle(partialImage response: ImageResponse, options: ImageLoadingOptions) {
        display(response.container, false, .success)
    }

    private func display(_ image: ImageContainer, _ fromMemCache: Bool, _ response: ImageLoadingOptions.ResponseType) {
        guard let imageView = imageView else {
            return
        }
