Files
ln-ios/ln_jq_app/ios/AMapNavIOSSDK/AMapNavIOSSDK/Classes/View/ABottomBarView.m

205 lines
7.0 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.
//
// ABottomBarView.m
// AMapNavIOSSDK
//
// Created by admin on 2026/3/25.
//
#import "ABottomBarView.h"
#import "AMapNavCommonUtil.h"
#import <Masonry/Masonry.h>
// 主题绿
static inline UIColor *ABottomBarThemeGreen(void) {
return [UIColor colorWithRed:0x1A/255.0 green:0x6E/255.0 blue:0x45/255.0 alpha:1.0];
}
@interface ABottomBarView () <UITextFieldDelegate>
/// 白色圆角背景卡片
@property (nonatomic, strong) UIView *cardView;
/// 搜索图标
@property (nonatomic, strong) UIImageView *searchIconView;
/// 目的地输入框
@property (nonatomic, strong) UITextField *searchField;
/// 规划路线按钮
@property (nonatomic, strong) UIButton *calRouteButton;
@end
@implementation ABottomBarView
#pragma mark - Init
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
[self _buildUI];
}
return self;
}
- (instancetype)init {
return [self initWithFrame:CGRectZero];
}
#pragma mark - Build UI
- (void)_buildUI {
// ── 背景卡片 ──────────────────────────────────────────
UIView *card = [[UIView alloc] init];
// card.backgroundColor = [UIColor colorWithRed:0.96 green:0.97 blue:0.98 alpha:0.96];
card.backgroundColor = [UIColor whiteColor];
card.layer.cornerRadius = 16;
// 顶部阴影
card.layer.shadowColor = [UIColor blackColor].CGColor;
card.layer.shadowOpacity = 0.10;
card.layer.shadowRadius = 10;
card.layer.shadowOffset = CGSizeMake(0, -3);
card.layer.masksToBounds = NO;
[self addSubview:card];
self.cardView = card;
[card mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
}];
// ── 搜索框容器(白色圆角行) ──────────────────────────
UIView *searchRow = [[UIView alloc] init];
searchRow.backgroundColor = [UIColor whiteColor];
searchRow.layer.cornerRadius = 5;
searchRow.layer.masksToBounds = YES;
searchRow.layer.borderColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1].CGColor;
searchRow.layer.borderWidth = 1;
[card addSubview:searchRow];
[searchRow mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(card).offset(-18);
make.left.equalTo(card).offset(16);
make.right.equalTo(card).offset(-16);
make.height.mas_equalTo(50);
}];
// ── 搜索图标 ──────────────────────────────────────────
UIImageView *searchIcon = [[UIImageView alloc] init];
searchIcon.contentMode = UIViewContentModeScaleAspectFit;
searchIcon.image = [AMapNavCommonUtil imageWithName3x:@"search_icon"];
[searchRow addSubview:searchIcon];
self.searchIconView = searchIcon;
[searchIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(searchRow);
make.left.equalTo(searchRow).offset(12);
make.width.height.mas_equalTo(18);
}];
// ── 目的地输入框 ──────────────────────────────────────
UITextField *field = [[UITextField alloc] init];
field.placeholder = @"请输入目的地,不输入则自动匹配附近成本最低加氢站";
field.font = [UIFont systemFontOfSize:14];
field.textColor = [UIColor colorWithWhite:0.1 alpha:1];
field.borderStyle = UITextBorderStyleNone;
field.backgroundColor = [UIColor clearColor];
field.delegate = self;
// placeholder 颜色
if (field.placeholder) {
field.attributedPlaceholder = [[NSAttributedString alloc]
initWithString:field.placeholder
attributes:@{NSForegroundColorAttributeName:
[UIColor colorWithWhite:0.65 alpha:1],
NSFontAttributeName:
[UIFont systemFontOfSize:13]}];
}
[searchRow addSubview:field];
self.searchField = field;
[field mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(searchRow);
make.left.equalTo(searchIcon.mas_right).offset(8);
make.right.equalTo(searchRow).offset(-12);
make.top.bottom.equalTo(searchRow);
}];
// ── 规划路线按钮 ──────────────────────────────────────
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = ABottomBarThemeGreen();
btn.layer.cornerRadius = 24;
btn.layer.masksToBounds = YES;
// 左侧图标
UIImageView *routeIcon = [[UIImageView alloc] init];
routeIcon.contentMode = UIViewContentModeScaleAspectFit;
routeIcon.image = [AMapNavCommonUtil imageWithName3x:@"cal_ruoute_icon"];
routeIcon.userInteractionEnabled = NO;
[btn addSubview:routeIcon];
// 标题
UILabel *titleLbl = [[UILabel alloc] init];
titleLbl.text = @"规划路线";
titleLbl.textColor = [UIColor whiteColor];
titleLbl.font = [UIFont boldSystemFontOfSize:16];
titleLbl.userInteractionEnabled = NO;
[btn addSubview:titleLbl];
// 图标和文字水平居中整体
[routeIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(btn);
make.right.equalTo(titleLbl.mas_left).offset(-8);
make.width.height.mas_equalTo(22);
}];
[titleLbl mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(btn);
// 两者整体水平居中titleLbl 向右偏移 (22+8)/2 = 15pt
make.centerX.equalTo(btn).offset(15);
}];
[btn addTarget:self action:@selector(_onCalRouteTapped) forControlEvents:UIControlEventTouchUpInside];
[card addSubview:btn];
self.calRouteButton = btn;
CGFloat off_y = AMP_TabbarHeight;
#ifdef kAMapSDKDebugFlag
off_y = 0;
#endif
[btn mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(searchRow.mas_bottom).offset(20);
make.left.equalTo(card).offset(16);
make.right.equalTo(card).offset(-16);
make.height.mas_equalTo(48);
make.bottom.equalTo(card).offset(-40 - off_y);
}];
}
#pragma mark - Public
- (void)setDestinationText:(NSString *)destinationText {
_destinationText = destinationText;
self.searchField.text = destinationText;
}
#pragma mark - Actions
- (void)_onCalRouteTapped {
if ([self.delegate respondsToSelector:@selector(bottomBarViewDidTapCalRoute:)]) {
[self.delegate bottomBarViewDidTapCalRoute:self];
}
}
#pragma mark - UITextFieldDelegate
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
// 不弹起键盘,直接通知外部展示搜索页
if ([self.delegate respondsToSelector:@selector(bottomBarViewDidTapSearchField:)]) {
[self.delegate bottomBarViewDidTapSearchField:self];
}
return NO;
}
@end