New file |
| | |
| | | /* |
| | | * This file is part of the SDWebImage package. |
| | | * (c) Olivier Poitrey <rs@dailymotion.com> |
| | | * |
| | | * For the full copyright and license information, please view the LICENSE |
| | | * file that was distributed with this source code. |
| | | */ |
| | | |
| | | #import "SDWebImageCompat.h" |
| | | |
| | | #if SD_UIKIT || SD_MAC |
| | | #import "SDImageCache.h" |
| | | |
| | | // This class is used to provide a transition animation after the view category load image finished. Use this on `sd_imageTransition` in UIView+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. |
| | | // 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. |
| | | |
| | | #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, SDImageCacheType cacheType, NSURL * _Nullable imageURL); |
| | | typedef void (^SDWebImageTransitionAnimationsBlock)(__kindof UIView * _Nonnull view, UIImage * _Nullable image); |
| | | typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); |
| | | |
| | | @interface 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 NS_AVAILABLE_MAC(10_7); |
| | | /** |
| | | 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 SDWebImageTransition (Conveniences) |
| | | |
| | | // class property is available in Xcode 8. We will drop the Xcode 7.3 support in 5.x |
| | | #if __has_feature(objc_class_property) |
| | | /// Fade transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *fadeTransition; |
| | | /// Flip from left transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromLeftTransition; |
| | | /// Flip from right transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromRightTransition; |
| | | /// Flip from top transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromTopTransition; |
| | | /// Flip from bottom transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromBottomTransition; |
| | | /// Curl up transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlUpTransition; |
| | | /// Curl down transition. |
| | | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlDownTransition; |
| | | #else |
| | | + (nonnull instancetype)fadeTransition; |
| | | + (nonnull instancetype)flipFromLeftTransition; |
| | | + (nonnull instancetype)flipFromRightTransition; |
| | | + (nonnull instancetype)flipFromTopTransition; |
| | | + (nonnull instancetype)flipFromBottomTransition; |
| | | + (nonnull instancetype)curlUpTransition; |
| | | + (nonnull instancetype)curlDownTransition; |
| | | #endif |
| | | |
| | | @end |
| | | |
| | | #endif |