190 lines
6.1 KiB
Objective-C
190 lines
6.1 KiB
Objective-C
//
|
||
// 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
|