POPBasicAnimation.mm 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /**
  2. Copyright (c) 2014-present, Facebook, Inc.
  3. All rights reserved.
  4. This source code is licensed under the BSD-style license found in the
  5. LICENSE file in the root directory of this source tree. An additional grant
  6. of patent rights can be found in the PATENTS file in the same directory.
  7. */
  8. #import "POPBasicAnimationInternal.h"
  9. @implementation POPBasicAnimation
  10. #undef __state
  11. #define __state ((POPBasicAnimationState *)_state)
  12. #pragma mark - Lifecycle
  13. + (instancetype)animation
  14. {
  15. return [[self alloc] init];
  16. }
  17. + (instancetype)animationWithPropertyNamed:(NSString *)aName
  18. {
  19. POPBasicAnimation *anim = [self animation];
  20. anim.property = [POPAnimatableProperty propertyWithName:aName];
  21. return anim;
  22. }
  23. - (void)_initState
  24. {
  25. _state = new POPBasicAnimationState(self);
  26. }
  27. + (instancetype)linearAnimation
  28. {
  29. POPBasicAnimation *anim = [self animation];
  30. anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
  31. return anim;
  32. }
  33. + (instancetype)easeInAnimation
  34. {
  35. POPBasicAnimation *anim = [self animation];
  36. anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
  37. return anim;
  38. }
  39. + (instancetype)easeOutAnimation
  40. {
  41. POPBasicAnimation *anim = [self animation];
  42. anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
  43. return anim;
  44. }
  45. + (instancetype)easeInEaseOutAnimation
  46. {
  47. POPBasicAnimation *anim = [self animation];
  48. anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  49. return anim;
  50. }
  51. + (instancetype)defaultAnimation
  52. {
  53. POPBasicAnimation *anim = [self animation];
  54. anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
  55. return anim;
  56. }
  57. - (id)init
  58. {
  59. return [self _init];
  60. }
  61. #pragma mark - Properties
  62. DEFINE_RW_PROPERTY(POPBasicAnimationState, duration, setDuration:, CFTimeInterval);
  63. DEFINE_RW_PROPERTY_OBJ(POPBasicAnimationState, timingFunction, setTimingFunction:, CAMediaTimingFunction*, __state->updatedTimingFunction(););
  64. #pragma mark - Utility
  65. - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug
  66. {
  67. [super _appendDescription:s debug:debug];
  68. if (__state->duration)
  69. [s appendFormat:@"; duration = %f", __state->duration];
  70. }
  71. @end
  72. @implementation POPBasicAnimation (NSCopying)
  73. - (instancetype)copyWithZone:(NSZone *)zone {
  74. POPBasicAnimation *copy = [super copyWithZone:zone];
  75. if (copy) {
  76. copy.duration = self.duration;
  77. copy.timingFunction = self.timingFunction; // not a 'copy', but timing functions are publicly immutable.
  78. }
  79. return copy;
  80. }
  81. @end