RelaxBubbleView.m 4.7 KB
#import "RelaxBubbleView.h"

#define MaxHeadCount 6
#define kHeadWidth 18
#define kOverlapOffset 4
#define kRightMargin 0

@interface RelaxBubbleView ()
@property (nonatomic, strong) UIImageView * activeImg;
@property (nonatomic, strong) NSMutableArray * dataImgArr_net;
@property (nonatomic, assign) int jsh_index;
@property (nonatomic, assign) int jsh_img;
@property (nonatomic, assign) int overlapSpace;
@end

@implementation RelaxBubbleView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = DSClearColor;
        self.overlapSpace = kHeadWidth - kOverlapOffset;
        self.dataImgArr_net = [NSMutableArray array];
        self.userInteractionEnabled = NO;
        [self createUI];
    }
    return self;
}

- (void)createUI {
    for (int i = 0; i < MaxHeadCount; i++) {
        UIImageView * imgv = [[UIImageView alloc] initWithFrame:CGRectMake(self.width - kRightMargin - kHeadWidth - self.overlapSpace*i, 0, kHeadWidth, kHeadWidth)];
        imgv.tag = 10 + i;
        imgv.centerY = self.centerY;
        [imgv cornerRadius:kHeadWidth/2];
        imgv.layer.dk_borderColorPicker = DKColorPickerWithColors(DSWhite, ColorFromHex(0x263154), DSWhite);
        imgv.layer.borderWidth = 1;
        imgv.backgroundColor = [UIColor lightGrayColor];
        [self addSubview:imgv];
        if (i == 0) {
            self.jsh_index = 0;
            self.activeImg = imgv;
        }
    }
}

- (void)setDataArr_net:(NSArray *)dataArr_net {
    if (_dataArr_net != dataArr_net) {
        _dataArr_net = dataArr_net;
    }
    [self checkData_net];
}

- (void)checkData_net {
    WS(weakSelf);
    
    [self.layer removeAllAnimations];
    [self.dataImgArr_net removeAllObjects];
    if (_dataArr_net.count < MaxHeadCount) {
        // [DSProgressHUD showToast:[NSString stringWithFormat:@"传入图片个数不能少于%d个", MaxHeadCount]];
        return;
    }
    
    int __block jsh_dataImg = 0;
    for (int i = 0; i < _dataArr_net.count; i++) {
        UIImageView *dataImgV = [[UIImageView alloc] init];
        NSDictionary *face_img_dic = _dataArr_net[i];
        [dataImgV yy_setImageWithURL:[NSURL URLWithString:face_img_dic[@"face_img"]] placeholder:nil options:YYWebImageOptionRefreshImageCache completion:^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error) {
            jsh_dataImg = jsh_dataImg + 1;
            if (jsh_dataImg == weakSelf.dataImgArr_net.count) {
                for (int i = 0; i < MaxHeadCount; i++) {
                    UIImageView * imgv = [weakSelf viewWithTag:10+i];
                    UIImageView * dataImgV_net = weakSelf.dataImgArr_net[i];
                    imgv.image = dataImgV_net.image;
                }
                self.jsh_img = MaxHeadCount - 1;
                [self startAnimation_net];
            }
        }];
        [self.dataImgArr_net addObject:dataImgV];
    }
}

- (void)startAnimation_net {
    WS(weakSelf);
    [UIView animateWithDuration:1 animations:^{
        NSInteger activeTag = weakSelf.activeImg.tag;
        for (int i = 0; i < MaxHeadCount; i++) {
            NSInteger aTag = 10+i;
            if (aTag != activeTag) {
                UIImageView * imgg = [weakSelf viewWithTag:10+i];
                imgg.centerX = imgg.centerX + self.overlapSpace;
            }
        }
    } completion:^(BOOL finished) {
        weakSelf.activeImg.centerX = kHeadWidth / 2.0;
        weakSelf.activeImg.transform = CGAffineTransformScale(weakSelf.activeImg.transform, 0.1, 0.1);
        if (weakSelf.jsh_img < weakSelf.dataArr_net.count - 1) {
            weakSelf.jsh_img = weakSelf.jsh_img + 1;
        } else {
            weakSelf.jsh_img = 0;
        }
        UIImageView * dataImg_net = weakSelf.dataImgArr_net[weakSelf.jsh_img];
        weakSelf.activeImg.image = dataImg_net.image;
        
        [UIView animateWithDuration:1 animations:^{
            weakSelf.activeImg.transform = CGAffineTransformScale(weakSelf.activeImg.transform, 10, 10);
        } completion:^(BOOL finished) {
            [weakSelf bringSubviewToFront:weakSelf.activeImg];
            [UIView animateWithDuration:1 animations:^{
                weakSelf.activeImg.x = self.width - kRightMargin - kHeadWidth - self.overlapSpace * (MaxHeadCount - 1);
            } completion:^(BOOL finished) {
                weakSelf.jsh_index = weakSelf.jsh_index + 1;
                if (weakSelf.jsh_index > (MaxHeadCount - 1)) {
                    weakSelf.jsh_index = 0;
                }
                weakSelf.activeImg = [weakSelf viewWithTag:10+weakSelf.jsh_index];
                [weakSelf startAnimation_net];
            }];
        }];
    }];
}

@end