SDWebImageTransition.m 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. SDWebImageTransition *transition = [SDWebImageTransition new];
  78. #if SD_UIKIT
  79. transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction;
  80. #else
  81. transition.animationOptions = SDWebImageAnimationOptionTransitionCrossDissolve;
  82. #endif
  83. return transition;
  84. }
  85. + (SDWebImageTransition *)flipFromLeftTransition {
  86. SDWebImageTransition *transition = [SDWebImageTransition new];
  87. #if SD_UIKIT
  88. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowUserInteraction;
  89. #else
  90. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromLeft;
  91. #endif
  92. return transition;
  93. }
  94. + (SDWebImageTransition *)flipFromRightTransition {
  95. SDWebImageTransition *transition = [SDWebImageTransition new];
  96. #if SD_UIKIT
  97. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionAllowUserInteraction;
  98. #else
  99. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromRight;
  100. #endif
  101. return transition;
  102. }
  103. + (SDWebImageTransition *)flipFromTopTransition {
  104. SDWebImageTransition *transition = [SDWebImageTransition new];
  105. #if SD_UIKIT
  106. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionAllowUserInteraction;
  107. #else
  108. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromTop;
  109. #endif
  110. return transition;
  111. }
  112. + (SDWebImageTransition *)flipFromBottomTransition {
  113. SDWebImageTransition *transition = [SDWebImageTransition new];
  114. #if SD_UIKIT
  115. transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionAllowUserInteraction;
  116. #else
  117. transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromBottom;
  118. #endif
  119. return transition;
  120. }
  121. + (SDWebImageTransition *)curlUpTransition {
  122. SDWebImageTransition *transition = [SDWebImageTransition new];
  123. #if SD_UIKIT
  124. transition.animationOptions = UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionAllowUserInteraction;
  125. #else
  126. transition.animationOptions = SDWebImageAnimationOptionTransitionCurlUp;
  127. #endif
  128. return transition;
  129. }
  130. + (SDWebImageTransition *)curlDownTransition {
  131. SDWebImageTransition *transition = [SDWebImageTransition new];
  132. #if SD_UIKIT
  133. transition.animationOptions = UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionAllowUserInteraction;
  134. #else
  135. transition.animationOptions = SDWebImageAnimationOptionTransitionCurlDown;
  136. #endif
  137. return transition;
  138. }
  139. @end
  140. #endif