KSAudioAnimationView.m 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //
  2. // KSAudioAnimationView.m
  3. // KulexiuSchoolStudent
  4. //
  5. // Created by 王智 on 2023/8/29.
  6. //
  7. #import "KSAudioAnimationView.h"
  8. #define ANIMATION_RATIO (0.9)
  9. @interface KSAudioAnimationView ()
  10. // 💿旋转view
  11. @property (weak, nonatomic) IBOutlet UIView *discView;
  12. @property (weak, nonatomic) IBOutlet UIImageView *music_image;
  13. @property (nonatomic, strong) UIImageView *stylusImage;
  14. @end
  15. @implementation KSAudioAnimationView
  16. - (void)awakeFromNib {
  17. [super awakeFromNib];
  18. [self addSubview:self.stylusImage];
  19. self.stylusImage.frame = CGRectMake(132*ANIMATION_RATIO, 17*ANIMATION_RATIO, 43*ANIMATION_RATIO, 117*ANIMATION_RATIO);
  20. [self setAnchorPoint:CGPointMake(28.5 / 43*ANIMATION_RATIO, 25.0 / 117*ANIMATION_RATIO) forView:self.stylusImage];
  21. [self transformStylusView:YES];
  22. }
  23. - (void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)stylusImage {
  24. CGPoint oldOrigin = stylusImage.frame.origin;
  25. stylusImage.layer.anchorPoint = anchorPoint;
  26. CGPoint newOrigin = stylusImage.frame.origin;
  27. CGPoint transition;
  28. transition.x = newOrigin.x - oldOrigin.x;
  29. transition.y = newOrigin.y - oldOrigin.y;
  30. stylusImage.center = CGPointMake(stylusImage.center.x - transition.x, stylusImage.center.y - transition.y);
  31. }
  32. - (void)transformStylusView:(BOOL)isHide {
  33. if (isHide) {
  34. self.stylusImage.transform = CGAffineTransformIdentity;
  35. self.stylusImage.transform = CGAffineTransformMakeRotation(M_PI_2);
  36. }
  37. else {
  38. self.stylusImage.transform = CGAffineTransformIdentity;
  39. }
  40. }
  41. + (instancetype)shareInstance {
  42. KSAudioAnimationView *view = [[[NSBundle mainBundle] loadNibNamed:@"KSAudioAnimationView" owner:nil options:nil] firstObject];
  43. view.frame = CGRectMake(0, 0, 180, 180);
  44. return view;
  45. }
  46. - (void)setIsPlay:(BOOL)isPlay {
  47. _isPlay = isPlay;
  48. if (isPlay) {
  49. [self addRotationAnimation];
  50. [UIView animateWithDuration:1 animations:^{
  51. [self transformStylusView:NO];
  52. }];
  53. }
  54. else {
  55. [self removeAnimation];
  56. [UIView animateWithDuration:1 animations:^{
  57. [self transformStylusView:YES];
  58. }];
  59. }
  60. }
  61. - (void)addRotationAnimation {
  62. CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
  63. rotationAnimation.toValue = [NSNumber numberWithFloat:M_PI *2.0];
  64. rotationAnimation.duration = 4.0f;
  65. rotationAnimation.cumulative = YES;
  66. rotationAnimation.repeatCount = CGFLOAT_MAX;
  67. [self.discView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
  68. }
  69. - (void)removeAnimation {
  70. [self.discView.layer removeAllAnimations];
  71. }
  72. - (void)configWithImageWithUrl:(NSString *)imageUrl {
  73. if ([NSString isEmptyString:imageUrl]) {
  74. [self.music_image setImage:[UIImage imageNamed:@"pub_music_placeholder"]];
  75. }
  76. else {
  77. [self.music_image sd_setImageWithURL:[NSURL URLWithString:imageUrl]];
  78. }
  79. }
  80. - (UIImageView *)stylusImage {
  81. if (!_stylusImage) {
  82. _stylusImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"stylus_image"]];
  83. }
  84. return _stylusImage;
  85. }
  86. /*
  87. // Only override drawRect: if you perform custom drawing.
  88. // An empty implementation adversely affects performance during animation.
  89. - (void)drawRect:(CGRect)rect {
  90. // Drawing code
  91. }
  92. */
  93. @end