语音vip限制ai弹窗
This commit is contained in:
@@ -54,7 +54,6 @@
|
|||||||
0459D1B72EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; };
|
0459D1B72EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; };
|
||||||
0459D1B82EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; };
|
0459D1B82EBA287900F2D189 /* KBSkinManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459D1B62EBA287900F2D189 /* KBSkinManager.m */; };
|
||||||
0460866B2F18D75500757C95 /* ai_test.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 0460866A2F18D75500757C95 /* ai_test.m4a */; };
|
0460866B2F18D75500757C95 /* ai_test.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 0460866A2F18D75500757C95 /* ai_test.m4a */; };
|
||||||
046086732F191B6900757C95 /* KBAiMainVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 046086722F191B6900757C95 /* KBAiMainVC.m */; };
|
|
||||||
046086752F191CC700757C95 /* AI技术分析.txt in Resources */ = {isa = PBXBuildFile; fileRef = 046086742F191CC700757C95 /* AI技术分析.txt */; };
|
046086752F191CC700757C95 /* AI技术分析.txt in Resources */ = {isa = PBXBuildFile; fileRef = 046086742F191CC700757C95 /* AI技术分析.txt */; };
|
||||||
0460869A2F19238500757C95 /* KBAiWaveformView.m in Sources */ = {isa = PBXBuildFile; fileRef = 046086992F19238500757C95 /* KBAiWaveformView.m */; };
|
0460869A2F19238500757C95 /* KBAiWaveformView.m in Sources */ = {isa = PBXBuildFile; fileRef = 046086992F19238500757C95 /* KBAiWaveformView.m */; };
|
||||||
0460869C2F19238500757C95 /* KBAiRecordButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 046086972F19238500757C95 /* KBAiRecordButton.m */; };
|
0460869C2F19238500757C95 /* KBAiRecordButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 046086972F19238500757C95 /* KBAiRecordButton.m */; };
|
||||||
@@ -404,8 +403,6 @@
|
|||||||
0459D1B52EBA287900F2D189 /* KBSkinManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinManager.h; sourceTree = "<group>"; };
|
0459D1B52EBA287900F2D189 /* KBSkinManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinManager.h; sourceTree = "<group>"; };
|
||||||
0459D1B62EBA287900F2D189 /* KBSkinManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinManager.m; sourceTree = "<group>"; };
|
0459D1B62EBA287900F2D189 /* KBSkinManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinManager.m; sourceTree = "<group>"; };
|
||||||
0460866A2F18D75500757C95 /* ai_test.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_test.m4a; sourceTree = "<group>"; };
|
0460866A2F18D75500757C95 /* ai_test.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = ai_test.m4a; sourceTree = "<group>"; };
|
||||||
046086712F191B6900757C95 /* KBAiMainVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAiMainVC.h; sourceTree = "<group>"; };
|
|
||||||
046086722F191B6900757C95 /* KBAiMainVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAiMainVC.m; sourceTree = "<group>"; };
|
|
||||||
046086742F191CC700757C95 /* AI技术分析.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "AI技术分析.txt"; sourceTree = "<group>"; };
|
046086742F191CC700757C95 /* AI技术分析.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "AI技术分析.txt"; sourceTree = "<group>"; };
|
||||||
046086962F19238500757C95 /* KBAiRecordButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAiRecordButton.h; sourceTree = "<group>"; };
|
046086962F19238500757C95 /* KBAiRecordButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAiRecordButton.h; sourceTree = "<group>"; };
|
||||||
046086972F19238500757C95 /* KBAiRecordButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAiRecordButton.m; sourceTree = "<group>"; };
|
046086972F19238500757C95 /* KBAiRecordButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAiRecordButton.m; sourceTree = "<group>"; };
|
||||||
@@ -1158,8 +1155,6 @@
|
|||||||
0460866E2F191A5100757C95 /* VC */ = {
|
0460866E2F191A5100757C95 /* VC */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
046086712F191B6900757C95 /* KBAiMainVC.h */,
|
|
||||||
046086722F191B6900757C95 /* KBAiMainVC.m */,
|
|
||||||
048FFD092F273BFC005D62AE /* KBAIHomeVC.h */,
|
048FFD092F273BFC005D62AE /* KBAIHomeVC.h */,
|
||||||
048FFD0A2F273BFC005D62AE /* KBAIHomeVC.m */,
|
048FFD0A2F273BFC005D62AE /* KBAIHomeVC.m */,
|
||||||
048FFD2B2F29F356005D62AE /* KBAIMessageVC.h */,
|
048FFD2B2F29F356005D62AE /* KBAIMessageVC.h */,
|
||||||
@@ -2474,7 +2469,6 @@
|
|||||||
04122FAD2EC73C0100EF7AB3 /* KBVipSubscribeCell.m in Sources */,
|
04122FAD2EC73C0100EF7AB3 /* KBVipSubscribeCell.m in Sources */,
|
||||||
049FB31D2EC21BCD00FAB05D /* KBMyKeyboardCell.m in Sources */,
|
049FB31D2EC21BCD00FAB05D /* KBMyKeyboardCell.m in Sources */,
|
||||||
048909F62EC0AAAA00FABA60 /* KBCategoryTitleCell.m in Sources */,
|
048909F62EC0AAAA00FABA60 /* KBCategoryTitleCell.m in Sources */,
|
||||||
046086732F191B6900757C95 /* KBAiMainVC.m in Sources */,
|
|
||||||
048909F72EC0AAAA00FABA60 /* KBCategoryTitleView.m in Sources */,
|
048909F72EC0AAAA00FABA60 /* KBCategoryTitleView.m in Sources */,
|
||||||
048FFD332F29F3D2005D62AE /* KBAIMessageChatingVC.m in Sources */,
|
048FFD332F29F3D2005D62AE /* KBAIMessageChatingVC.m in Sources */,
|
||||||
048FFD342F29F400005D62AE /* KBAIMessageListVC.m in Sources */,
|
048FFD342F29F400005D62AE /* KBAIMessageListVC.m in Sources */,
|
||||||
|
|||||||
22
keyBoard/Assets.xcassets/AI/ai_limit_close.imageset/Contents.json
vendored
Normal file
22
keyBoard/Assets.xcassets/AI/ai_limit_close.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ai_limit_close@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ai_limit_close@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
keyBoard/Assets.xcassets/AI/ai_limit_close.imageset/ai_limit_close@2x.png
vendored
Normal file
BIN
keyBoard/Assets.xcassets/AI/ai_limit_close.imageset/ai_limit_close@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
BIN
keyBoard/Assets.xcassets/AI/ai_limit_close.imageset/ai_limit_close@3x.png
vendored
Normal file
BIN
keyBoard/Assets.xcassets/AI/ai_limit_close.imageset/ai_limit_close@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
22
keyBoard/Assets.xcassets/AI/ai_limit_goto.imageset/Contents.json
vendored
Normal file
22
keyBoard/Assets.xcassets/AI/ai_limit_goto.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ai_limit_goto@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ai_limit_goto@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
keyBoard/Assets.xcassets/AI/ai_limit_goto.imageset/ai_limit_goto@2x.png
vendored
Normal file
BIN
keyBoard/Assets.xcassets/AI/ai_limit_goto.imageset/ai_limit_goto@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
BIN
keyBoard/Assets.xcassets/AI/ai_limit_goto.imageset/ai_limit_goto@3x.png
vendored
Normal file
BIN
keyBoard/Assets.xcassets/AI/ai_limit_goto.imageset/ai_limit_goto@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
22
keyBoard/Assets.xcassets/AI/ai_limit_icon.imageset/Contents.json
vendored
Normal file
22
keyBoard/Assets.xcassets/AI/ai_limit_icon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ai_limit_icon@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "ai_limit_icon@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
keyBoard/Assets.xcassets/AI/ai_limit_icon.imageset/ai_limit_icon@2x.png
vendored
Normal file
BIN
keyBoard/Assets.xcassets/AI/ai_limit_icon.imageset/ai_limit_icon@2x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 358 KiB |
BIN
keyBoard/Assets.xcassets/AI/ai_limit_icon.imageset/ai_limit_icon@3x.png
vendored
Normal file
BIN
keyBoard/Assets.xcassets/AI/ai_limit_icon.imageset/ai_limit_icon@3x.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 733 KiB |
@@ -8,21 +8,25 @@
|
|||||||
#import "KBChatLimitPopView.h"
|
#import "KBChatLimitPopView.h"
|
||||||
#import <Masonry/Masonry.h>
|
#import <Masonry/Masonry.h>
|
||||||
|
|
||||||
|
static CGFloat const kKBChatLimitIconSize = 252.0;
|
||||||
|
static CGFloat const kKBChatLimitGotoWidth = 251.0;
|
||||||
|
static CGFloat const kKBChatLimitGotoHeight = 53.0;
|
||||||
|
static CGFloat const kKBChatLimitCloseSize = 28.0;
|
||||||
|
static CGFloat const kKBChatLimitSpacing1 = 18.0;
|
||||||
|
static CGFloat const kKBChatLimitSpacing2 = 18.0;
|
||||||
|
|
||||||
@interface KBChatLimitPopView ()
|
@interface KBChatLimitPopView ()
|
||||||
@property (nonatomic, strong) UILabel *titleLabel;
|
@property (nonatomic, strong) UIImageView *iconImageView;
|
||||||
@property (nonatomic, strong) UILabel *messageLabel;
|
@property (nonatomic, strong) UILabel *messageLabel;
|
||||||
@property (nonatomic, strong) UIButton *cancelButton;
|
@property (nonatomic, strong) UIButton *gotoButton;
|
||||||
@property (nonatomic, strong) UIButton *rechargeButton;
|
@property (nonatomic, strong) UIButton *closeButton;
|
||||||
@property (nonatomic, strong) UIView *buttonDivider;
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation KBChatLimitPopView
|
@implementation KBChatLimitPopView
|
||||||
|
|
||||||
- (instancetype)initWithFrame:(CGRect)frame {
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
if (self = [super initWithFrame:frame]) {
|
if (self = [super initWithFrame:frame]) {
|
||||||
self.backgroundColor = [UIColor whiteColor];
|
self.backgroundColor = [UIColor clearColor];
|
||||||
self.layer.cornerRadius = 16.0;
|
|
||||||
self.layer.masksToBounds = YES;
|
|
||||||
[self setupUI];
|
[self setupUI];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
@@ -31,51 +35,37 @@
|
|||||||
#pragma mark - UI
|
#pragma mark - UI
|
||||||
|
|
||||||
- (void)setupUI {
|
- (void)setupUI {
|
||||||
[self addSubview:self.titleLabel];
|
[self addSubview:self.iconImageView];
|
||||||
[self addSubview:self.messageLabel];
|
[self.iconImageView addSubview:self.messageLabel];
|
||||||
[self addSubview:self.buttonDivider];
|
[self addSubview:self.gotoButton];
|
||||||
[self addSubview:self.cancelButton];
|
[self addSubview:self.closeButton];
|
||||||
[self addSubview:self.rechargeButton];
|
|
||||||
|
|
||||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
[self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.top.equalTo(self).offset(20);
|
make.top.equalTo(self);
|
||||||
make.left.equalTo(self).offset(20);
|
|
||||||
make.right.equalTo(self).offset(-20);
|
|
||||||
}];
|
|
||||||
|
|
||||||
[self.messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.top.equalTo(self.titleLabel.mas_bottom).offset(8);
|
|
||||||
make.left.equalTo(self).offset(20);
|
|
||||||
make.right.equalTo(self).offset(-20);
|
|
||||||
}];
|
|
||||||
|
|
||||||
[self.buttonDivider mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.left.right.equalTo(self);
|
|
||||||
make.height.mas_equalTo(1);
|
|
||||||
make.top.greaterThanOrEqualTo(self.messageLabel.mas_bottom).offset(16);
|
|
||||||
make.bottom.equalTo(self).offset(-48);
|
|
||||||
}];
|
|
||||||
|
|
||||||
[self.cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.left.bottom.equalTo(self);
|
|
||||||
make.top.equalTo(self.buttonDivider.mas_bottom);
|
|
||||||
make.right.equalTo(self.mas_centerX);
|
|
||||||
}];
|
|
||||||
|
|
||||||
[self.rechargeButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.right.bottom.equalTo(self);
|
|
||||||
make.top.equalTo(self.buttonDivider.mas_bottom);
|
|
||||||
make.left.equalTo(self.mas_centerX);
|
|
||||||
}];
|
|
||||||
|
|
||||||
UIView *verticalLine = [[UIView alloc] init];
|
|
||||||
verticalLine.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];
|
|
||||||
[self addSubview:verticalLine];
|
|
||||||
[verticalLine mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
||||||
make.centerX.equalTo(self);
|
make.centerX.equalTo(self);
|
||||||
make.top.equalTo(self.buttonDivider.mas_bottom);
|
make.width.height.mas_equalTo(kKBChatLimitIconSize);
|
||||||
|
}];
|
||||||
|
|
||||||
|
// 让文案落在图中留白区域(大致居中偏下)
|
||||||
|
[self.messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
// make.centerX.equalTo(self.iconImageView);
|
||||||
|
make.centerY.equalTo(self.iconImageView).offset(10);
|
||||||
|
make.left.equalTo(self.iconImageView).offset(26);
|
||||||
|
make.right.equalTo(self.iconImageView).offset(-46);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.gotoButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.equalTo(self.iconImageView.mas_bottom).offset(kKBChatLimitSpacing1);
|
||||||
|
make.centerX.equalTo(self);
|
||||||
|
make.width.mas_equalTo(kKBChatLimitGotoWidth);
|
||||||
|
make.height.mas_equalTo(kKBChatLimitGotoHeight);
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.top.equalTo(self.gotoButton.mas_bottom).offset(kKBChatLimitSpacing2);
|
||||||
|
make.centerX.equalTo(self);
|
||||||
|
make.width.height.mas_equalTo(kKBChatLimitCloseSize);
|
||||||
make.bottom.equalTo(self);
|
make.bottom.equalTo(self);
|
||||||
make.width.mas_equalTo(1);
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,56 +92,46 @@
|
|||||||
|
|
||||||
#pragma mark - Lazy
|
#pragma mark - Lazy
|
||||||
|
|
||||||
- (UILabel *)titleLabel {
|
- (UIImageView *)iconImageView {
|
||||||
if (!_titleLabel) {
|
if (!_iconImageView) {
|
||||||
_titleLabel = [[UILabel alloc] init];
|
_iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ai_limit_icon"]];
|
||||||
_titleLabel.text = KBLocalized(@"提示");
|
_iconImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||||
_titleLabel.font = [UIFont boldSystemFontOfSize:18];
|
_iconImageView.userInteractionEnabled = YES;
|
||||||
_titleLabel.textColor = [UIColor blackColor];
|
|
||||||
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
|
||||||
}
|
}
|
||||||
return _titleLabel;
|
return _iconImageView;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UILabel *)messageLabel {
|
- (UILabel *)messageLabel {
|
||||||
if (!_messageLabel) {
|
if (!_messageLabel) {
|
||||||
_messageLabel = [[UILabel alloc] init];
|
_messageLabel = [[UILabel alloc] init];
|
||||||
_messageLabel.font = [UIFont systemFontOfSize:14];
|
_messageLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium];
|
||||||
_messageLabel.textColor = [UIColor colorWithWhite:0.2 alpha:1.0];
|
_messageLabel.textColor = [UIColor colorWithWhite:0.18 alpha:1.0];
|
||||||
_messageLabel.textAlignment = NSTextAlignmentCenter;
|
_messageLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
_messageLabel.numberOfLines = 0;
|
_messageLabel.numberOfLines = 0;
|
||||||
}
|
}
|
||||||
return _messageLabel;
|
return _messageLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIButton *)cancelButton {
|
- (UIButton *)gotoButton {
|
||||||
if (!_cancelButton) {
|
if (!_gotoButton) {
|
||||||
_cancelButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
_gotoButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
[_cancelButton setTitle:KBLocalized(@"取消") forState:UIControlStateNormal];
|
[_gotoButton setBackgroundImage:[UIImage imageNamed:@"ai_limit_goto"] forState:UIControlStateNormal];
|
||||||
_cancelButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
|
[_gotoButton setTitle:KBLocalized(@"Go To Recharge") forState:UIControlStateNormal];
|
||||||
[_cancelButton setTitleColor:[UIColor colorWithWhite:0.2 alpha:1.0] forState:UIControlStateNormal];
|
[_gotoButton setTitleColor:[UIColor colorWithWhite:0.1 alpha:1.0] forState:UIControlStateNormal];
|
||||||
[_cancelButton addTarget:self action:@selector(onTapCancel) forControlEvents:UIControlEventTouchUpInside];
|
_gotoButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold];
|
||||||
|
[_gotoButton addTarget:self action:@selector(onTapRecharge) forControlEvents:UIControlEventTouchUpInside];
|
||||||
}
|
}
|
||||||
return _cancelButton;
|
return _gotoButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UIButton *)rechargeButton {
|
- (UIButton *)closeButton {
|
||||||
if (!_rechargeButton) {
|
if (!_closeButton) {
|
||||||
_rechargeButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
_closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
[_rechargeButton setTitle:KBLocalized(@"去充值") forState:UIControlStateNormal];
|
[_closeButton setImage:[UIImage imageNamed:@"ai_limit_close"] forState:UIControlStateNormal];
|
||||||
_rechargeButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold];
|
[_closeButton addTarget:self action:@selector(onTapCancel) forControlEvents:UIControlEventTouchUpInside];
|
||||||
[_rechargeButton setTitleColor:[UIColor colorWithRed:0.28 green:0.45 blue:0.94 alpha:1.0] forState:UIControlStateNormal];
|
|
||||||
[_rechargeButton addTarget:self action:@selector(onTapRecharge) forControlEvents:UIControlEventTouchUpInside];
|
|
||||||
}
|
}
|
||||||
return _rechargeButton;
|
return _closeButton;
|
||||||
}
|
|
||||||
|
|
||||||
- (UIView *)buttonDivider {
|
|
||||||
if (!_buttonDivider) {
|
|
||||||
_buttonDivider = [[UIView alloc] init];
|
|
||||||
_buttonDivider.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];
|
|
||||||
}
|
|
||||||
return _buttonDivider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#import "AiVM.h"
|
#import "AiVM.h"
|
||||||
#import "KBHUD.h"
|
#import "KBHUD.h"
|
||||||
#import "KBChatLimitPopView.h"
|
#import "KBChatLimitPopView.h"
|
||||||
#import "KBVipPay.h"
|
#import "KBPayMainVC.h"
|
||||||
#import "KBUserSessionManager.h"
|
#import "KBUserSessionManager.h"
|
||||||
#import "LSTPopView.h"
|
#import "LSTPopView.h"
|
||||||
#import "KBAIMessageVC.h"
|
#import "KBAIMessageVC.h"
|
||||||
@@ -764,8 +764,9 @@ static NSString * const KBAISelectedPersonaIdKey = @"KBAISelectedPersonaId";
|
|||||||
[self.chatLimitPopView dismiss];
|
[self.chatLimitPopView dismiss];
|
||||||
}
|
}
|
||||||
|
|
||||||
CGFloat width = KB_SCREEN_WIDTH - 60;
|
CGFloat width = 252.0;
|
||||||
KBChatLimitPopView *content = [[KBChatLimitPopView alloc] initWithFrame:CGRectMake(0, 0, width, 180)];
|
CGFloat height = 252.0 + 18.0 + 53.0 + 18.0 + 28.0;
|
||||||
|
KBChatLimitPopView *content = [[KBChatLimitPopView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
|
||||||
content.message = message;
|
content.message = message;
|
||||||
content.delegate = self;
|
content.delegate = self;
|
||||||
|
|
||||||
@@ -841,7 +842,8 @@ static NSString * const KBAISelectedPersonaIdKey = @"KBAISelectedPersonaId";
|
|||||||
[[KBUserSessionManager shared] goLoginVC];
|
[[KBUserSessionManager shared] goLoginVC];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
KBVipPay *vc = [[KBVipPay alloc] init];
|
KBPayMainVC *vc = [[KBPayMainVC alloc] init];
|
||||||
|
vc.initialSelectedIndex = 1; // SVIP
|
||||||
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1051,8 +1053,21 @@ static NSString * const KBAISelectedPersonaIdKey = @"KBAISelectedPersonaId";
|
|||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
KBPersonaChatCell *cell = [strongSelf currentPersonaCell];
|
KBPersonaChatCell *cell = [strongSelf currentPersonaCell];
|
||||||
|
// 处理次数用尽(与聊天接口保持一致)
|
||||||
if (error) {
|
if (error) {
|
||||||
|
NSInteger bizCode = [error.userInfo[@"code"] integerValue];
|
||||||
|
NSString *messageError = error.localizedDescription;
|
||||||
|
if (bizCode == 50030) {
|
||||||
|
if (cell) {
|
||||||
|
[cell removeLoadingUserMessage];
|
||||||
|
}
|
||||||
|
NSString *message = messageError ?: @"";
|
||||||
|
strongSelf.isVoiceProcessing = NO;
|
||||||
|
[strongSelf updateCollectionViewScrollState];
|
||||||
|
[strongSelf showChatLimitPopWithMessage:message];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
NSLog(@"[KBAIHomeVC] 语音转文字失败:%@", error.localizedDescription);
|
NSLog(@"[KBAIHomeVC] 语音转文字失败:%@", error.localizedDescription);
|
||||||
[KBHUD showError:KBLocalized(@"语音转文字失败,请重试")];
|
[KBHUD showError:KBLocalized(@"语音转文字失败,请重试")];
|
||||||
if (cell) {
|
if (cell) {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#import "KBAiRecordButton.h"
|
#import "KBAiRecordButton.h"
|
||||||
#import "KBHUD.h"
|
#import "KBHUD.h"
|
||||||
#import "KBChatLimitPopView.h"
|
#import "KBChatLimitPopView.h"
|
||||||
#import "KBVipPay.h"
|
#import "KBPayMainVC.h"
|
||||||
#import "LSTPopView.h"
|
#import "LSTPopView.h"
|
||||||
#import "VoiceChatStreamingManager.h"
|
#import "VoiceChatStreamingManager.h"
|
||||||
#import "KBUserSessionManager.h"
|
#import "KBUserSessionManager.h"
|
||||||
@@ -430,9 +430,10 @@
|
|||||||
[self.limitPopView dismiss];
|
[self.limitPopView dismiss];
|
||||||
}
|
}
|
||||||
|
|
||||||
CGFloat width = KB_SCREEN_WIDTH - 60;
|
CGFloat width = 252.0;
|
||||||
|
CGFloat height = 252.0 + 18.0 + 53.0 + 18.0 + 28.0;
|
||||||
KBChatLimitPopView *content =
|
KBChatLimitPopView *content =
|
||||||
[[KBChatLimitPopView alloc] initWithFrame:CGRectMake(0, 0, width, 180)];
|
[[KBChatLimitPopView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
|
||||||
content.message = message;
|
content.message = message;
|
||||||
content.delegate = self;
|
content.delegate = self;
|
||||||
|
|
||||||
@@ -461,7 +462,8 @@
|
|||||||
[[KBUserSessionManager shared] goLoginVC];
|
[[KBUserSessionManager shared] goLoginVC];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
KBVipPay *vc = [[KBVipPay alloc] init];
|
KBPayMainVC *vc = [[KBPayMainVC alloc] init];
|
||||||
|
vc.initialSelectedIndex = 1; // SVIP
|
||||||
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
[KB_CURRENT_NAV pushViewController:vc animated:true];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
@interface KBPayMainVC : BaseViewController
|
@interface KBPayMainVC : BaseViewController
|
||||||
|
|
||||||
|
/// 默认选中的会员类型:
|
||||||
|
/// - 0:VIP
|
||||||
|
/// - 1:SVIP
|
||||||
|
/// 默认 0
|
||||||
|
@property (nonatomic, assign) NSInteger initialSelectedIndex;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ static const CGFloat JXheightForHeaderInSection = 39;
|
|||||||
self.view.backgroundColor = [UIColor whiteColor];
|
self.view.backgroundColor = [UIColor whiteColor];
|
||||||
// self.navigationController.navigationBar.translucent = false;
|
// self.navigationController.navigationBar.translucent = false;
|
||||||
// self.edgesForExtendedLayout = UIRectEdgeNone;
|
// self.edgesForExtendedLayout = UIRectEdgeNone;
|
||||||
|
NSInteger initialIndex = (self.initialSelectedIndex == 1) ? 1 : 0;
|
||||||
self.imageNames = @[@"VIP_Normal_icon", @"SVIP_Normal_icon"];
|
self.imageNames = @[@"VIP_Normal_icon", @"SVIP_Normal_icon"];
|
||||||
NSArray *selectedImageNames = @[@"VIP_Selected_icon", @"SVIP_Selected_icon"];
|
NSArray *selectedImageNames = @[@"VIP_Selected_icon", @"SVIP_Selected_icon"];
|
||||||
|
|
||||||
@@ -84,6 +85,7 @@ static const CGFloat JXheightForHeaderInSection = 39;
|
|||||||
|
|
||||||
self.myCategoryView.imageInfoArray = self.imageNames;
|
self.myCategoryView.imageInfoArray = self.imageNames;
|
||||||
self.myCategoryView.selectedImageInfoArray = selectedImageNames;
|
self.myCategoryView.selectedImageInfoArray = selectedImageNames;
|
||||||
|
self.myCategoryView.defaultSelectedIndex = initialIndex;
|
||||||
self.myCategoryView.loadImageBlock = ^(UIImageView *imageView, id info) {
|
self.myCategoryView.loadImageBlock = ^(UIImageView *imageView, id info) {
|
||||||
NSString *imageName = info;
|
NSString *imageName = info;
|
||||||
imageView.image = [UIImage imageNamed:imageName];
|
imageView.image = [UIImage imageNamed:imageName];
|
||||||
@@ -101,6 +103,7 @@ static const CGFloat JXheightForHeaderInSection = 39;
|
|||||||
|
|
||||||
|
|
||||||
_pagerView = [self preferredPagingView];
|
_pagerView = [self preferredPagingView];
|
||||||
|
self.pagerView.defaultSelectedIndex = initialIndex;
|
||||||
self.pagerView.mainTableView.gestureDelegate = self;
|
self.pagerView.mainTableView.gestureDelegate = self;
|
||||||
[self.view addSubview:self.pagerView];
|
[self.view addSubview:self.pagerView];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user