Files
keyboard/keyBoard/Class/Guard/V/KBKeyboardMaskView.m

126 lines
4.2 KiB
Mathematica
Raw Normal View History

2025-11-27 15:34:33 +08:00
//
// KBKeyboardMaskView.m
// keyBoard
//
// Created by Mac on 2025/11/27.
//
#import "KBKeyboardMaskView.h"
@interface KBKeyboardMaskView ()
@property (nonatomic, strong) UIButton *backButton;
@property (nonatomic, strong) FLAnimatedImageView *gifView;
@property (nonatomic, assign) CGFloat keyboardHeight;
@end
@implementation KBKeyboardMaskView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (!self) return nil;
2025-11-27 19:20:20 +08:00
self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
2025-11-27 15:34:33 +08:00
self.userInteractionEnabled = YES;
//
_backButton = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *backImg = [UIImage imageNamed:@"close_white2_icon"];
[_backButton setImage:backImg forState:UIControlStateNormal];
[self addSubview:_backButton];
[_backButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self).offset(9);
if (@available(iOS 11.0, *)) {
make.top.equalTo(self.mas_safeAreaLayoutGuideTop).offset(4);
} else {
make.top.equalTo(self).offset(40);
}
make.width.height.mas_equalTo(40);
}];
// GIF
_gifView = [FLAnimatedImageView new];
_gifView.contentMode = UIViewContentModeScaleAspectFit;
_gifView.clipsToBounds = YES;
[self addSubview:_gifView];
// ==300 layoutSubviews
CGFloat screenW = UIScreen.mainScreen.bounds.size.width;
[_gifView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self);
2025-11-27 19:20:20 +08:00
make.width.mas_equalTo(KBFit(316));
make.height.mas_equalTo(KBFit(209));
2025-11-27 15:34:33 +08:00
// layoutSubviews
}];
//
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapMask:)];
[self addGestureRecognizer:tap];
// GIF
NSString *gifPath = [[NSBundle mainBundle] pathForResource:@"kb_guide_keyboard" ofType:@"gif"];
if (gifPath.length > 0) {
NSData *data = [NSData dataWithContentsOfFile:gifPath];
if (data.length > 0) {
FLAnimatedImage *img = [FLAnimatedImage animatedImageWithGIFData:data];
_gifView.animatedImage = img;
}
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
// GIF
// -
// - 20pt safe
CGFloat viewH = CGRectGetHeight(self.bounds);
CGFloat gifH = 300.0;
CGFloat topMargin = 80.0; //
CGFloat bottomMargin = 20.0;
CGFloat y = 0;
if (self.keyboardHeight <= 0) {
//
y = (viewH - gifH) * 0.5;
if (y < topMargin) y = topMargin;
} else {
CGFloat maxBottom = viewH - self.keyboardHeight - bottomMargin;
y = maxBottom - gifH;
if (y < topMargin) y = topMargin;
}
CGRect frame = self.gifView.frame;
frame.origin.y = y;
self.gifView.frame = frame;
}
- (void)onTapMask:(UITapGestureRecognizer *)gr {
CGPoint p = [gr locationInView:self];
// tapHandler
if (CGRectContainsPoint(self.backButton.frame, p)) {
return;
}
if (self.tapHandler) {
self.tapHandler();
}
}
- (void)updateForKeyboardHeight:(CGFloat)kbHeight
duration:(NSTimeInterval)duration
curve:(UIViewAnimationOptions)curve {
self.keyboardHeight = MAX(kbHeight, 0);
// 便 layoutSubviews gifView Y
[self setNeedsLayout];
[UIView animateWithDuration:duration
delay:0
options:curve
animations:^{
[self layoutIfNeeded];
}
completion:nil];
}
@end