RelaxBubbleView.m
4.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#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