| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- //
- // LiveGiftLuckView.m
- // MiMoLive
- //
- // Created by MiMo on 2025/2/9.
- //
- #define kLiveGiftLuckViewWidth 143.0
- #define kLiveGiftLuckViewHeigth 73.0
- #define kLiveGiftLuckNumWidth 8
- #define kLiveGiftLuckNumHeight 11
- #import "LiveGiftLuckView.h"
- #import "LiveGiftShowView.h"
- #import "LiveGiftShowModel.h"
- @interface LiveGiftLuckView ()<CAAnimationDelegate>
- @property (nonatomic, strong) UIImageView *bgLightView;
- @property (nonatomic, strong) UIImageView *bgImgView;
- @property (nonatomic, strong) UIImageView *timesImgView;
- @property (nonatomic, strong) UIImageView *resultImageView;
- @end
- @implementation LiveGiftLuckView
- - (instancetype)init {
- if (self = [super init]) {
- [self setupUI];
- }
- return self;
- }
- - (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- [self setupUI];
- }
- return self;
- }
- - (void)setupUI {
- // self.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.3];
-
- [self addSubview:self.bgLightView];
- [self.bgLightView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerX.mas_equalTo(0);
- make.height.width.mas_equalTo(88);
- make.bottom.mas_equalTo(5);
- }];
-
- [self addSubview:self.bgImgView];
- [self.bgImgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.edges.mas_equalTo(0);
- }];
-
- [self addSubview:self.timesImgView];
- [self.timesImgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerX.mas_equalTo(0);
- make.bottom.mas_equalTo(-16);
- make.size.mas_equalTo(CGSizeMake(22, 6));
- }];
-
- [self addSubview:self.resultImageView];
- [self.resultImageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerX.mas_equalTo(0);
- make.bottom.equalTo(self.timesImgView.mas_top);
- make.width.mas_equalTo(kLiveGiftLuckNumWidth);
- make.height.mas_equalTo(kLiveGiftLuckNumHeight);
- }];
- }
- - (void)setRtmEntity:(MORtmEntity *)rtmEntity{
- _rtmEntity = rtmEntity;
-
- MORtmJosnEntity *jsonData = (MORtmJosnEntity *)rtmEntity.data;
-
- if(jsonData.rebateMultiple >= 100 && jsonData.rebateMultiple <= 999){
- [self.bgImgView setImage:[UIImage imageNamed:@"icon_luck_mid_bg"]];
- [self.bgLightView setImage:[UIImage imageNamed:@"icon_luck_mid_light"]];
- } else if (jsonData.rebateMultiple >= 1000) {
- [self.bgImgView setImage:[UIImage imageNamed:@"icon_luck_big_bg"]];
- [self.bgLightView setImage:[UIImage imageNamed:@"icon_luck_big_light"]];
- } else { //小于100
- [self.bgImgView setImage:[UIImage imageNamed:@"icon_luck_small_bg"]];
- [self.bgLightView setImage:nil];
- }
-
- NSString *strNum = [NSString stringWithFormat:@"%zd", jsonData.rebateMultiple];
- NSMutableArray *resultImageArray = [NSMutableArray array];
- for (int i = 0; i < strNum.length; i++) {
- NSString *num = [strNum substringWithRange:NSMakeRange(i, 1)];
- UIImage *numImg = [UIImage imageNamed:[NSString stringWithFormat:@"gift_luck_times_%d", num.intValue]];
- if (numImg) {
- numImg = [UIImage scaleImage:numImg toSize:CGSizeMake(kLiveGiftLuckNumWidth, kLiveGiftLuckNumHeight)];
- [resultImageArray addObject:numImg];
- }
- }
-
- self.resultImageView.image = [UIImage combineImages:resultImageArray];
-
- [self.resultImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.centerX.mas_equalTo(0);
- make.bottom.equalTo(self.timesImgView.mas_top);
- make.width.mas_equalTo(strNum.length * kLiveGiftLuckNumWidth);
- make.height.mas_equalTo(kLiveGiftLuckNumHeight);
- }];
- }
- - (void)showGiftLuckView {
-
- LiveGiftShowView *endView;
- UIView *giftView;
-
- for (LiveGiftShowView *view in self.endView.subviews) {
- if([view isKindOfClass:[LiveGiftShowView class]]){
-
- //临时View 先确定一个
- if([view.model.user.name isEqualToString:self.rtmEntity.user.username]){
- endView = view;
-
- UIView *tempGiftView = [view viewWithTag:-987654];
- giftView = tempGiftView;
-
- //再确定礼物也一致
- if(view.model.giftModel.giftData.giftCode == self.giftCode){
- endView = view;
-
- UIView *tempGiftView = [view viewWithTag:-987654];
- giftView = tempGiftView;
- break;
- }
- }
- }
- }
-
- if (!giftView) {
- return;
- }
-
- for (UIView *view in endView.subviews) {
- if([view isKindOfClass:[LiveGiftLuckView class]]){
- [view removeFromSuperview];
- }
- }
-
- CGPoint newCenterPoint = giftView.center;
- newCenterPoint = CGPointMake(newCenterPoint.x - 50, newCenterPoint.y - 5);
-
- CGFloat width = kLiveGiftLuckViewWidth;
- CGFloat height = kLiveGiftLuckViewHeigth;
- self.frame = CGRectMake(0, 0, width, height);
- self.center = newCenterPoint;
- [endView addSubview:self];
-
- CABasicAnimation *scaleUp1 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- scaleUp1.fromValue = @3;
- scaleUp1.toValue = @1.4;
- scaleUp1.duration = 0.25;
-
- CABasicAnimation *scaleDown1 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- scaleDown1.fromValue = @1.4;
- scaleDown1.toValue = @1.2;
- scaleDown1.beginTime = 0.25;
- scaleDown1.duration = 0.25;
-
- CABasicAnimation *scaleUp2 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- scaleUp2.fromValue = @1.2;
- scaleUp2.toValue = @1.4;
- scaleUp2.beginTime = 0.5;
- scaleUp2.duration = 0.25;
-
- CABasicAnimation *scaleDown2 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- scaleDown2.fromValue = @1.4;
- scaleDown2.toValue = @1.2;
- scaleDown2.beginTime = 0.75;
- scaleDown2.duration = 0.25;
-
- // 动画组合
- CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
- animationGroup.animations = @[scaleUp1,scaleDown1,scaleUp2,scaleDown2];
- animationGroup.duration = 1;
-
- // 设置动画结束后保持最终状态
- animationGroup.fillMode = kCAFillModeForwards;
- animationGroup.removedOnCompletion = NO;
-
- // 设置动画结束后代理
- animationGroup.delegate = self;
-
- // 将动画添加到视图的图层上
- [self.layer addAnimation:animationGroup forKey:@"moveAndScaleAnimation"];
-
- MORtmJosnEntity *jsonData = (MORtmJosnEntity *)self.rtmEntity.data;
- self.bgLightView.hidden = NO;
- // 创建自旋动画
- CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
- rotationAnimation.fromValue = @(0); // 起始角度
- rotationAnimation.toValue = @(M_PI * 2); // 终止角度
- rotationAnimation.duration = KTimeOutNum; // 动画持续时间
- rotationAnimation.repeatCount = HUGE_VALF; // 重复次数(无限循环)
-
- // 添加动画到视图的图层上
- [self.bgLightView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
- }
- #pragma mark - CAAnimationDelegate
- - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
- if (flag) {
- // 动画结束后执行的操作
- MOLogV(@"Animation finished");
-
- // 这里可以调用其他方法或执行其他操作
- [self dismiss];
- } else{
- [self dismiss];
- }
- }
- - (void)dismiss {
- [UIView animateWithDuration:0.5 animations:^{
- self.alpha = 0;
- } completion:^(BOOL finished) {
- if (finished) {
- [self removeFromSuperview];
- }
- }];
- }
- #pragma mark - Lazy
- - (UIImageView *)bgLightView {
- if (!_bgLightView){
- _bgLightView = [[UIImageView alloc] init];
- _bgLightView.contentMode = UIViewContentModeScaleAspectFill;
- _bgLightView.hidden = YES;
- }
- return _bgLightView;
- }
- - (UIImageView *)bgImgView {
- if (!_bgImgView){
- _bgImgView = [[UIImageView alloc] init];
- _bgImgView.contentMode = UIViewContentModeScaleAspectFill;
- }
- return _bgImgView;
- }
- - (UIImageView *)timesImgView {
- if (!_timesImgView){
- _timesImgView = [[UIImageView alloc] init];
- [_timesImgView setImage:[UIImage imageNamed:@"gift_luck_times"]];
- _timesImgView.contentMode = UIViewContentModeScaleAspectFill;
- }
- return _timesImgView;
- }
- - (UIImageView *)resultImageView {
- if (!_resultImageView) {
- _resultImageView = [[UIImageView alloc] init];
- }
- return _resultImageView;
- }
- @end
|