123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- * 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"
- #if SD_UIKIT
- typedef UIViewAnimationOptions SDWebImageAnimationOptions;
- #else
- typedef NS_OPTIONS(NSUInteger, SDWebImageAnimationOptions) {
- SDWebImageAnimationOptionAllowsImplicitAnimation = 1 << 0, // specify `allowsImplicitAnimation` for the `NSAnimationContext`
-
- SDWebImageAnimationOptionCurveEaseInOut = 0 << 16, // default
- SDWebImageAnimationOptionCurveEaseIn = 1 << 16,
- SDWebImageAnimationOptionCurveEaseOut = 2 << 16,
- SDWebImageAnimationOptionCurveLinear = 3 << 16,
-
- SDWebImageAnimationOptionTransitionNone = 0 << 20, // default
- SDWebImageAnimationOptionTransitionFlipFromLeft = 1 << 20,
- SDWebImageAnimationOptionTransitionFlipFromRight = 2 << 20,
- SDWebImageAnimationOptionTransitionCurlUp = 3 << 20,
- SDWebImageAnimationOptionTransitionCurlDown = 4 << 20,
- SDWebImageAnimationOptionTransitionCrossDissolve = 5 << 20,
- SDWebImageAnimationOptionTransitionFlipFromTop = 6 << 20,
- SDWebImageAnimationOptionTransitionFlipFromBottom = 7 << 20,
- };
- #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);
- /**
- 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.
- @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 SDWebImageTransition : NSObject
- /**
- By default, we set the image to the view at the beginning of the animations. 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) API_DEPRECATED("Use SDWebImageAnimationOptions instead, or grab NSAnimationContext.currentContext and modify the timingFunction", macos(10.10, 10.10));
- /**
- 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)
- /// Fade-in 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;
- /// Fade-in transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)fadeTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(fade(duration:));
- /// Flip from left transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromLeft(duration:));
- /// Flip from right transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)flipFromRightTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromRight(duration:));
- /// Flip from top transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)flipFromTopTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromTop(duration:));
- /// Flip from bottom transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromBottom(duration:));
- /// Curl up transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)curlUpTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(curlUp(duration:));
- /// Curl down transition with duration.
- /// @param duration transition duration, use ease-in-out
- + (nonnull instancetype)curlDownTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(curlDown(duration:));
- @end
- #endif
|