SDWebImageTransition.m 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /*
  2. * This file is part of the SDWebImage package.
  3. * (c) Olivier Poitrey <rs@dailymotion.com>
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. #import "SDWebImageTransition.h"
  9. #if SD_UIKIT || SD_MAC
  10. #if SD_MAC
  11. #import "SDWebImageTransitionInternal.h"
  12. #import "SDInternalMacros.h"
  13. CAMediaTimingFunction * SDTimingFunctionFromAnimationOptions(SDWebImageAnimationOptions options) {
  14. if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveLinear, options)) {
  15. return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
  16. } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseIn, options)) {
  17. return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
  18. } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseOut, options)) {
  19. return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
  20. } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseInOut, options)) {
  21. return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  22. } else {
  23. return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
  24. }
  25. }
  26. CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions options) {
  27. if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCrossDissolve)) {
  28. CATransition *trans = [CATransition animation];
  29. trans.type = kCATransitionFade;
  30. return trans;
  31. } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromLeft)) {
  32. CATransition *trans = [CATransition animation];
  33. trans.type = kCATransitionPush;
  34. trans.subtype = kCATransitionFromLeft;
  35. return trans;
  36. } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromRight)) {
  37. CATransition *trans = [CATransition animation];
  38. trans.type = kCATransitionPush;
  39. trans.subtype = kCATransitionFromRight;
  40. return trans;
  41. } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromTop)) {
  42. CATransition *trans = [CATransition animation];
  43. trans.type = kCATransitionPush;
  44. trans.subtype = kCATransitionFromTop;
  45. return trans;
  46. } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromBottom)) {
  47. CATransition *trans = [CATransition animation];
  48. trans.type = kCATransitionPush;
  49. trans.subtype = kCATransitionFromBottom;
  50. return trans;
  51. } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCurlUp)) {
  52. CATransition *trans = [CATransition animation];
  53. trans.type = kCATransitionReveal;
  54. trans.subtype = kCATransitionFromTop;
  55. return trans;
  56. } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCurlDown)) {
  57. CATransition *trans = [CATransition animation];
  58. trans.type = kCATransitionReveal;
  59. trans.subtype = kCATransitionFromBottom;
  60. return trans;
  61. } else {
  62. return nil;
  63. }
  64. }
  65. #endif
  66. @implementation SDWebImageTransition
  67. - (instancetype)init {
  68. self = [super init];
  69. if (self) {
  70. self.duration = 0.5;
  71. }
  72. return self;
  73. }
  74. @end
  75. @implementation SDWebImageTransition (Conveniences)
  76. + (SDWebImageTransition *)fadeTransition {
  77. return [self fadeTransitionWithDuration:0.5];
  78. }
  79. + (SDWebImageTransition *)fadeTransitionWithDuration:(NSTimeInterval)duration {
  80. SDWebImageTransition *transition = [SDWebImageTransition new];
  81. transition.duration = duration;
  82. #if SD_UIKIT
  83. transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction;
  84. #else
  85. transition.animationOptions = SDWebImageAnimationOptionTransitionCrossDissolve;
  86. #endif
  87. return transition;
  88. }
  89. + (SDWebImageTransition *)flipFromLeftTransition {
  90. return [self flipFromLeftTransitionWithDuration:0.5];
  91. }
  92. + (SDWebImageTransition *)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration {
  93. SDWebImageTransition *transition = [SDWebImageTransition new];
  94. transition.duration = duration;
  95. #if SD_UIKIT
  96. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowUserInteraction;
  97. #else
  98. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromLeft;
  99. #endif
  100. return transition;
  101. }
  102. + (SDWebImageTransition *)flipFromRightTransition {
  103. return [self flipFromRightTransitionWithDuration:0.5];
  104. }
  105. + (SDWebImageTransition *)flipFromRightTransitionWithDuration:(NSTimeInterval)duration {
  106. SDWebImageTransition *transition = [SDWebImageTransition new];
  107. transition.duration = duration;
  108. #if SD_UIKIT
  109. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionAllowUserInteraction;
  110. #else
  111. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromRight;
  112. #endif
  113. return transition;
  114. }
  115. + (SDWebImageTransition *)flipFromTopTransition {
  116. return [self flipFromTopTransitionWithDuration:0.5];
  117. }
  118. + (SDWebImageTransition *)flipFromTopTransitionWithDuration:(NSTimeInterval)duration {
  119. SDWebImageTransition *transition = [SDWebImageTransition new];
  120. transition.duration = duration;
  121. #if SD_UIKIT
  122. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionAllowUserInteraction;
  123. #else
  124. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromTop;
  125. #endif
  126. return transition;
  127. }
  128. + (SDWebImageTransition *)flipFromBottomTransition {
  129. return [self flipFromBottomTransitionWithDuration:0.5];
  130. }
  131. + (SDWebImageTransition *)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration {
  132. SDWebImageTransition *transition = [SDWebImageTransition new];
  133. transition.duration = duration;
  134. #if SD_UIKIT
  135. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionAllowUserInteraction;
  136. #else
  137. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromBottom;
  138. #endif
  139. return transition;
  140. }
  141. + (SDWebImageTransition *)curlUpTransition {
  142. return [self curlUpTransitionWithDuration:0.5];
  143. }
  144. + (SDWebImageTransition *)curlUpTransitionWithDuration:(NSTimeInterval)duration {
  145. SDWebImageTransition *transition = [SDWebImageTransition new];
  146. transition.duration = duration;
  147. #if SD_UIKIT
  148. transition.animationOptions = UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionAllowUserInteraction;
  149. #else
  150. transition.animationOptions = SDWebImageAnimationOptionTransitionCurlUp;
  151. #endif
  152. return transition;
  153. }
  154. + (SDWebImageTransition *)curlDownTransition {
  155. return [self curlDownTransitionWithDuration:0.5];
  156. }
  157. + (SDWebImageTransition *)curlDownTransitionWithDuration:(NSTimeInterval)duration {
  158. SDWebImageTransition *transition = [SDWebImageTransition new];
  159. transition.duration = duration;
  160. #if SD_UIKIT
  161. transition.animationOptions = UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionAllowUserInteraction;
  162. #else
  163. transition.animationOptions = SDWebImageAnimationOptionTransitionCurlDown;
  164. #endif
  165. transition.duration = duration;
  166. return transition;
  167. }
  168. @end
  169. #endif