Files
peko-ios/YuMi/Modules/YMRoom/View/AnimationView/RoomHighValueGiftBannerAnimation.m

190 lines
6.1 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// RoomHighValueGiftBanner.m
// YuMi
//
// Created by P on 2024/11/1.
//
#import "RoomHighValueGiftBannerAnimation.h"
#import "SVGA.h"
@interface RoomHighValueGiftBannerAnimation ()
///背景
@property (nonatomic,strong) UIImageView *backImageView;
@property (nonatomic, strong) SVGAImageView *svgaImageView;
///赠送者头像
@property(nonatomic,strong) NetImageView *senderAvatarView;
///赠送内容who send who
@property(nonatomic,strong) MarqueeLabel *senderScrollLabel;
///房间名称
@property(nonatomic,strong) MarqueeLabel *roomNameScrollLabel;
///礼物
@property (nonatomic,strong) NetImageView *giftImageView;
///礼物内容
@property (nonatomic,strong) UILabel *giftContentLabel;
///去围观
@property(nonatomic,strong) UIButton *goButton;
@property (nonatomic, copy) void(^animationComplete)(void);
@end
@implementation RoomHighValueGiftBannerAnimation
+ (void)display:(UIView *)superView
with:(id)attachment
tapToRoom:(BOOL)handleTapToRoom
complete:(void(^)(void))complete {
NSInteger height = kGetScaleWidth(110);
NSInteger y = kStatusBarHeight;
RoomHighValueGiftBannerAnimation *banner = [[RoomHighValueGiftBannerAnimation alloc] initWithFrame:CGRectMake(KScreenWidth, y, KScreenWidth, height)];
banner.animationComplete = complete;
[superView addSubview:banner];
@kWeakify(banner);
[UIView animateWithDuration:0.25 animations:^{
banner.frame = CGRectMake(0, y, KScreenWidth, height);
} completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
banner.frame = CGRectMake(-KScreenWidth, y, KScreenWidth, height);
} completion:^(BOOL finished) {
@kStrongify(banner);
[banner removeFromSuperview];
}];
});
}];
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setupUI];
@kWeakify(self);
SVGAParser *parser = [[SVGAParser alloc] init];
[parser parseWithNamed:@"gift_VIP_1" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) {
@kStrongify(self);
self.svgaImageView.videoItem = videoItem;
[self.svgaImageView startAnimation];
} failureBlock:^(NSError * _Nonnull error) {
// TODO: 也飘出来? 降级?
}];
}
return self;
}
- (void)setupUI {
[self addSubview:self.backImageView];
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
[self addSubview:self.svgaImageView];
[self.svgaImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
[self addSubview:self.senderAvatarView];
[self.senderAvatarView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self);
make.leading.mas_equalTo(kGetScaleWidth(38));
make.size.mas_equalTo(CGSizeMake(36, 36));
}];
[self addSubview:self.giftImageView];
[self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self);
make.trailing.mas_equalTo(kGetScaleWidth(-106));
make.size.mas_equalTo(CGSizeMake(46, 46));
}];
}
#pragma mark -
- (UIImageView *)backImageView {
if (!_backImageView) {
_backImageView = [[UIImageView alloc] init];
}
return _backImageView;
}
- (SVGAImageView *)svgaImageView {
if (!_svgaImageView) {
_svgaImageView = [[SVGAImageView alloc] init];
}
return _svgaImageView;
}
- (NetImageView *)senderAvatarView {
if (!_senderAvatarView) {
NetImageConfig * config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
config.imageType = ImageTypeUserIcon;
_senderAvatarView = [[NetImageView alloc] initWithConfig:config];
_senderAvatarView.layer.masksToBounds = YES;
_senderAvatarView.layer.cornerRadius = 18;
_senderAvatarView.contentMode = UIViewContentModeScaleAspectFill;
}
return _senderAvatarView;
}
- (MarqueeLabel *)senderScrollLabel{
if(!_senderScrollLabel){
_senderScrollLabel = [[MarqueeLabel alloc] init];
_senderScrollLabel.scrollDuration = 6.0;
_senderScrollLabel.fadeLength = 8.0f;
_senderScrollLabel.textAlignment = NSTextAlignmentCenter;
}
return _senderScrollLabel;
}
- (MarqueeLabel *)roomNameScrollLabel{
if(!_roomNameScrollLabel){
_roomNameScrollLabel = [[MarqueeLabel alloc] init];
_roomNameScrollLabel.scrollDuration = 6.0;
_roomNameScrollLabel.fadeLength = 8.0f;
_roomNameScrollLabel.textAlignment = NSTextAlignmentCenter;
}
return _roomNameScrollLabel;
}
- (NetImageView *)giftImageView {
if (!_giftImageView) {
NetImageConfig * config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
config.imageType = ImageTypeUserIcon;
_giftImageView = [[NetImageView alloc] initWithConfig:config];
_giftImageView.layer.masksToBounds = YES;
_giftImageView.layer.cornerRadius = 4;
_giftImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _giftImageView;
}
- (UILabel *)giftContentLabel {
if (!_giftContentLabel) {
_giftContentLabel = [[UILabel alloc] init];
_giftContentLabel.textColor = UIColorFromRGB(0xFFE468);
_giftContentLabel.font = kFontHeavy(16);
}
return _giftContentLabel;
}
- (UIButton *)goButton{
if(!_goButton){
_goButton = [UIButton new];
[_goButton setTitle:YMLocalizedString(@"XPAcrossRoomPKPanelView3") forState:UIControlStateNormal];
_goButton.titleLabel.font = kFontRegular(10);
_goButton.layer.cornerRadius = kGetScaleWidth(20)/2;
_goButton.layer.borderWidth = 1;
_goButton.layer.masksToBounds = YES;
}
return _goButton;
}
@end