RCTLayoutAnimationGroup.m 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #import "RCTLayoutAnimationGroup.h"
  8. #import "RCTConvert.h"
  9. #import "RCTLayoutAnimation.h"
  10. @implementation RCTLayoutAnimationGroup
  11. - (instancetype)initWithCreatingLayoutAnimation:(RCTLayoutAnimation *)creatingLayoutAnimation
  12. updatingLayoutAnimation:(RCTLayoutAnimation *)updatingLayoutAnimation
  13. deletingLayoutAnimation:(RCTLayoutAnimation *)deletingLayoutAnimation
  14. callback:(RCTResponseSenderBlock)callback
  15. {
  16. if (self = [super init]) {
  17. _creatingLayoutAnimation = creatingLayoutAnimation;
  18. _updatingLayoutAnimation = updatingLayoutAnimation;
  19. _deletingLayoutAnimation = deletingLayoutAnimation;
  20. _callback = callback;
  21. }
  22. return self;
  23. }
  24. - (instancetype)initWithConfig:(NSDictionary *)config callback:(RCTResponseSenderBlock)callback
  25. {
  26. if (!config) {
  27. return nil;
  28. }
  29. if (self = [super init]) {
  30. NSTimeInterval duration = [RCTConvert NSTimeInterval:config[@"duration"]];
  31. if (duration > 0.0 && duration < 0.01) {
  32. RCTLogError(@"RCTLayoutAnimationGroup expects timings to be in ms, not seconds.");
  33. duration = duration * 1000.0;
  34. }
  35. _creatingLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDuration:duration config:config[@"create"]];
  36. _updatingLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDuration:duration config:config[@"update"]];
  37. _deletingLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDuration:duration config:config[@"delete"]];
  38. _callback = callback;
  39. }
  40. return self;
  41. }
  42. - (BOOL)isEqual:(RCTLayoutAnimationGroup *)layoutAnimation
  43. {
  44. RCTLayoutAnimation *creatingLayoutAnimation = layoutAnimation.creatingLayoutAnimation;
  45. RCTLayoutAnimation *updatingLayoutAnimation = layoutAnimation.updatingLayoutAnimation;
  46. RCTLayoutAnimation *deletingLayoutAnimation = layoutAnimation.deletingLayoutAnimation;
  47. return (_creatingLayoutAnimation == creatingLayoutAnimation ||
  48. [_creatingLayoutAnimation isEqual:creatingLayoutAnimation]) &&
  49. (_updatingLayoutAnimation == updatingLayoutAnimation ||
  50. [_updatingLayoutAnimation isEqual:updatingLayoutAnimation]) &&
  51. (_deletingLayoutAnimation == deletingLayoutAnimation ||
  52. [_deletingLayoutAnimation isEqual:deletingLayoutAnimation]);
  53. }
  54. - (NSString *)description
  55. {
  56. return
  57. [NSString stringWithFormat:
  58. @"<%@: %p; creatingLayoutAnimation: %@; updatingLayoutAnimation: %@; deletingLayoutAnimation: %@>",
  59. NSStringFromClass([self class]),
  60. self,
  61. [_creatingLayoutAnimation description],
  62. [_updatingLayoutAnimation description],
  63. [_deletingLayoutAnimation description]];
  64. }
  65. @end