直播间点赞动画
#pragma mark - 点赞动画
- (void)praiseAnimation {
UIImageView *imageView = [[UIImageView alloc] init];
CGRect frame = self.view.frame; // 初始frame,即设置了动画的起点
imageView.frame = CGRectMake(frame.size.width - 40, frame.size.height - 65, 30, 30); // 初始化imageView透明度为0 imageView.alpha = 0;
imageView.backgroundColor = [UIColor clearColor];
imageView.clipsToBounds = YES; // 用0.2秒的时间将imageView的透明度变成1.0,同时将其放大1.3倍,再缩放至1.1倍,这里参数根据需求设置 [UIView animateWithDuration:0.2 animations:^{
imageView.alpha = 1.0;
imageView.frame = CGRectMake(frame.size.width - 40, frame.size.height - 90, 30, 30);
CGAffineTransform transfrom = CGAffineTransformMakeScale(1.3, 1.3);
imageView.transform = CGAffineTransformScale(transfrom, 1, 1);
}];
[self.view addSubview:imageView]; // 随机产生一个动画结束点的X值
CGFloat finishX = frame.size.width - round(random() % 200); // 动画结束点的Y值
CGFloat finishY = 200; // imageView在运动过程中的缩放比例
CGFloat scale = round(random() % 2) + 0.7; // 生成一个作为速度参数的随机数
CGFloat speed = 1 / round(random() % 900) + 0.6; // 动画执行时间
NSTimeInterval duration = 4 * speed; // 如果得到的时间是无穷大,就重新附一个值(这里要特别注意,请看下面的特别提醒)
if (duration == INFINITY) duration = 2.412346; // 随机生成一个0~7的数,以便下面拼接图片名
int imageName = round(random() % 8); // 开始动画
[UIView beginAnimations:nil context:(__bridge void *_Nullable)(imageView)]; // 设置动画时间
[UIView setAnimationDuration:duration]; // 拼接图片名字
imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"good%d_30x30_.png",imageName]]; // 设置imageView的结束frame
imageView.frame = CGRectMake( finishX, finishY, 30 * scale, 30 * scale); // 设置渐渐消失的效果,这里的时间最好和动画时间一致 [UIView animateWithDuration:duration animations:^{
imageView.alpha = 0;
}]; // 结束动画,调用onAnimationComplete:finished:context:函数
[UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)]; // 设置动画代理
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
/// 动画完后销毁iamgeView
- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
UIImageView *imageView = (__bridge UIImageView *)(context);
[imageView removeFromSuperview];
imageView = nil;
}