/* * This file is part of the SDWebImage package. * (c) Olivier Poitrey * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ #import "BU_SDWebImageCompat.h" #if SD_UIKIT || SD_MAC #import "BU_SDImageCache.h" #if SD_UIKIT typedef UIViewAnimationOptions SDWebImageAnimationOptions; #else typedef NS_OPTIONS(NSUInteger, SDWebImageAnimationOptions) { SDWebImageAnimationOptionAllowsImplicitAnimation = 1 << 0, // specify `allowsImplicitAnimation` for the `NSAnimationContext` }; #endif typedef void (^SDWebImageTransitionPreparesBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image, NSData * _Nullable imageData, BU_SDImageCacheType cacheType, NSURL * _Nullable imageURL); typedef void (^SDWebImageTransitionAnimationsBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image); typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); /** This class is used to provide a transition animation after the view category load image finished. Use this on `sdBu_imageTransition` in UIView+BU_WebCache.h for UIKit(iOS & tvOS), we use `+[UIView transitionWithView:duration:options:animations:completion]` for transition animation. for AppKit(macOS), we use `+[NSAnimationContext runAnimationGroup:completionHandler:]` for transition animation. You can call `+[NSAnimationContext currentContext]` to grab the context during animations block. @note These transition are provided for basic usage. If you need complicated animation, consider to directly use Core Animation or use `SDWebImageAvoidAutoSetImage` and implement your own after image load finished. */ @interface BU_SDWebImageTransition : NSObject /** By default, we set the image to the view at the beginning of the animtions. You can disable this and provide custom set image process */ @property (nonatomic, assign) BOOL avoidAutoSetImage; /** The duration of the transition animation, measured in seconds. Defaults to 0.5. */ @property (nonatomic, assign) NSTimeInterval duration; /** The timing function used for all animations within this transition animation (macOS). */ @property (nonatomic, strong, nullable) CAMediaTimingFunction *timingFunction API_UNAVAILABLE(ios, tvos, watchos); /** A mask of options indicating how you want to perform the animations. */ @property (nonatomic, assign) SDWebImageAnimationOptions animationOptions; /** A block object to be executed before the animation sequence starts. */ @property (nonatomic, copy, nullable) SDWebImageTransitionPreparesBlock prepares; /** A block object that contains the changes you want to make to the specified view. */ @property (nonatomic, copy, nullable) SDWebImageTransitionAnimationsBlock animations; /** A block object to be executed when the animation sequence ends. */ @property (nonatomic, copy, nullable) SDWebImageTransitionCompletionBlock completion; @end /** Convenience way to create transition. Remember to specify the duration if needed. for UIKit, these transition just use the correspond `animationOptions`. By default we enable `UIViewAnimationOptionAllowUserInteraction` to allow user interaction during transition. for AppKit, these transition use Core Animation in `animations`. So your view must be layer-backed. Set `wantsLayer = YES` before you apply it. */ //@interface BU_SDWebImageTransition (Conveniences) // ///// Fade transition. ////@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *fadeTransition; ///// Flip from left transition. ////@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *flipFromLeftTransition; ///// Flip from right transition. //@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *flipFromRightTransition; ///// Flip from top transition. //@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *flipFromTopTransition; ///// Flip from bottom transition. //@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *flipFromBottomTransition; ///// Curl up transition. //@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *curlUpTransition; ///// Curl down transition. //@property (nonatomic, class, nonnull, readonly) BU_SDWebImageTransition *curlDownTransition; // //@end #endif