Initial commit
This commit is contained in:
+17
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// NTESGLView.h
|
||||
// NIM
|
||||
//
|
||||
// Created by fenric on 15/9/1.
|
||||
// Copyright (c) 2015年 Netease. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface NTESGLView : UIView
|
||||
|
||||
- (void) render: (NSData *)yuvData
|
||||
width:(NSUInteger)width
|
||||
height:(NSUInteger)height;
|
||||
|
||||
@end
|
||||
+1087
File diff suppressed because it is too large
Load Diff
+24
@@ -0,0 +1,24 @@
|
||||
//
|
||||
// NTESRecordSelectView.h
|
||||
// NIM
|
||||
//
|
||||
// Created by Simon Blue on 17/2/21.
|
||||
// Copyright © 2017年 Netease. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@protocol NTESRecordSelectViewDelegate <NSObject>
|
||||
|
||||
-(void)onRecordWithAudioConversation:(BOOL)audioConversationOn myMedia:(BOOL)myMediaOn otherSideMedia:(BOOL)otherSideMediaOn;
|
||||
|
||||
@end
|
||||
|
||||
@interface NTESRecordSelectView : UIView
|
||||
|
||||
-(instancetype)initWithFrame:(CGRect)frame Video:(BOOL)isVideo;
|
||||
|
||||
@property(nonatomic,weak)id<NTESRecordSelectViewDelegate> delegate;
|
||||
|
||||
@end
|
||||
+264
@@ -0,0 +1,264 @@
|
||||
//
|
||||
// NTESRecordSelectView.m
|
||||
// NIM
|
||||
//
|
||||
// Created by Simon Blue on 17/2/21.
|
||||
// Copyright © 2017年 Netease. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NTESRecordSelectView.h"
|
||||
#import "UIView+NTES.h"
|
||||
|
||||
#define NTESRecordSelectLabelTextColor 0x333333
|
||||
#define NTESRecordSelectLabelTextGrayColor 0x999999
|
||||
#define NTESRecordSelectStartButtonGrayColor 0xd0d0d0
|
||||
|
||||
@interface NTESRecordSelectView ()
|
||||
|
||||
@property (nonatomic ,strong) UIButton *audioConversation;
|
||||
|
||||
@property (nonatomic ,strong) UIButton *myMediaButton;
|
||||
|
||||
@property (nonatomic ,strong) UIButton *otherSideMediaButton;
|
||||
|
||||
@property (nonatomic ,strong) UIButton *cancelButton;
|
||||
|
||||
@property (nonatomic ,strong) UIButton *startButton;
|
||||
|
||||
@property (nonatomic ,strong) UILabel *audioConversationLable;
|
||||
|
||||
@property (nonatomic ,strong) UILabel *myMediaLable;
|
||||
|
||||
@property (nonatomic ,strong) UILabel *otherSideMediaLable;
|
||||
|
||||
@property (nonatomic ,strong) UILabel *title;
|
||||
|
||||
@property (nonatomic ,strong) UILabel *subTitle;
|
||||
|
||||
@property (nonatomic ,strong) UIView *horizontalSplitLine;
|
||||
|
||||
@property (nonatomic ,strong) UIView *verticalSplitLine;
|
||||
|
||||
@property (nonatomic ) BOOL isVideo;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@implementation NTESRecordSelectView
|
||||
|
||||
-(instancetype)initWithFrame:(CGRect)frame Video:(BOOL)isVideo
|
||||
{
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
|
||||
self.backgroundColor = [UIColor whiteColor];
|
||||
self.layer.cornerRadius = 3.5f;
|
||||
self.layer.masksToBounds = YES;
|
||||
//title
|
||||
_title = [[UILabel alloc]init];
|
||||
[_title setText:@"选择录制内容"];
|
||||
[_title setFont:[UIFont systemFontOfSize:16]];
|
||||
_title.textColor = UIColorFromRGB(NTESRecordSelectLabelTextColor);
|
||||
_title.textAlignment = NSTextAlignmentCenter;
|
||||
[self addSubview:_title];
|
||||
|
||||
//subTitle
|
||||
_subTitle = [[UILabel alloc]init];
|
||||
[_subTitle setText:@"录制的内容会被单独保存"];
|
||||
_subTitle.textAlignment = NSTextAlignmentCenter;
|
||||
[_subTitle setFont:[UIFont systemFontOfSize:10]];
|
||||
_subTitle.textColor = UIColorFromRGB(NTESRecordSelectLabelTextGrayColor);
|
||||
[self addSubview:_subTitle];
|
||||
|
||||
_audioConversationLable = [[UILabel alloc]init];
|
||||
[_audioConversationLable setText:@"语音对话"];
|
||||
_audioConversationLable.textAlignment = NSTextAlignmentLeft;
|
||||
_audioConversationLable.textColor = UIColorFromRGB(NTESRecordSelectLabelTextColor);
|
||||
|
||||
[self addSubview:_audioConversationLable];
|
||||
|
||||
_myMediaLable = [[UILabel alloc]init];
|
||||
[_myMediaLable setText: isVideo ? @"我的音视频" : @"我的音频"];
|
||||
_myMediaLable.textAlignment = NSTextAlignmentLeft;
|
||||
_myMediaLable.textColor = UIColorFromRGB(NTESRecordSelectLabelTextColor);
|
||||
|
||||
[self addSubview:_myMediaLable];
|
||||
|
||||
_otherSideMediaLable = [[UILabel alloc]init];
|
||||
[_otherSideMediaLable setText: isVideo ? @"对方音视频": @"对方音频"];
|
||||
_otherSideMediaLable.textAlignment = NSTextAlignmentLeft;
|
||||
_otherSideMediaLable.textColor = UIColorFromRGB(NTESRecordSelectLabelTextColor);
|
||||
|
||||
[self addSubview:_otherSideMediaLable];
|
||||
|
||||
//audioConversation
|
||||
_audioConversation = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_audioConversation addTarget:self action:@selector(audioConversationPressed) forControlEvents:UIControlEventTouchUpInside];
|
||||
[_audioConversation setImage:[UIImage imageNamed:@"record_not_selected"] forState:UIControlStateNormal];
|
||||
[_audioConversation setImage:[UIImage imageNamed:@"record_selected"] forState:UIControlStateSelected];
|
||||
[self addSubview:_audioConversation];
|
||||
[_audioConversation sizeToFit];
|
||||
|
||||
//myMediaButton
|
||||
_myMediaButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_myMediaButton setImage:[UIImage imageNamed:@"record_not_selected"] forState:UIControlStateNormal];
|
||||
[_myMediaButton setImage:[UIImage imageNamed:@"record_selected"] forState:UIControlStateSelected];
|
||||
[_myMediaButton addTarget:self action:@selector(myMediaPressed) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self addSubview:_myMediaButton];
|
||||
|
||||
_otherSideMediaButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_otherSideMediaButton setImage:[UIImage imageNamed:@"record_not_selected"] forState:UIControlStateNormal];
|
||||
[_otherSideMediaButton setImage:[UIImage imageNamed:@"record_selected"] forState:UIControlStateSelected];
|
||||
[_otherSideMediaButton addTarget:self action:@selector(otherSideMediaPressed) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self addSubview:_otherSideMediaButton];
|
||||
|
||||
//splitLine
|
||||
_horizontalSplitLine = [[UIView alloc]init];
|
||||
_horizontalSplitLine.backgroundColor = [UIColor grayColor];
|
||||
[self addSubview:_horizontalSplitLine];
|
||||
|
||||
//splitLine
|
||||
_verticalSplitLine = [[UIView alloc]init];
|
||||
_verticalSplitLine.backgroundColor = [UIColor grayColor];
|
||||
[self addSubview:_verticalSplitLine];
|
||||
|
||||
_cancelButton = [[UIButton alloc]init];
|
||||
[_cancelButton setTitle:@"取消" forState:UIControlStateNormal];
|
||||
[_cancelButton setTitleColor:UIColorFromRGB(NTESRecordSelectLabelTextColor) forState:UIControlStateNormal];
|
||||
[_cancelButton addTarget:self action:@selector(cancelButtonPressed) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self addSubview:_cancelButton];
|
||||
|
||||
_startButton = [[UIButton alloc]init];
|
||||
[_startButton setTitle:@"开始录制" forState:UIControlStateNormal];
|
||||
[_startButton setTitleColor:UIColorFromRGB(NTESRecordSelectLabelTextColor) forState:UIControlStateNormal];
|
||||
[_startButton setTitleColor:UIColorFromRGB(NTESRecordSelectStartButtonGrayColor) forState:UIControlStateDisabled];
|
||||
[_startButton addTarget:self action:@selector(startButtonPressed) forControlEvents:UIControlEventTouchUpInside];
|
||||
_startButton.enabled = NO;
|
||||
|
||||
[self addSubview:_startButton];
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)layoutSubviews
|
||||
{
|
||||
CGFloat labelHight = 15.f;
|
||||
CGFloat leftMarigin = 20.f;
|
||||
CGFloat rightMarigin = 20.f;
|
||||
|
||||
_title.top = 25.f;
|
||||
_title.width = 100.f;
|
||||
_title.height = 17.f;
|
||||
_title.centerX = self.width * .5f;
|
||||
|
||||
_subTitle.top = _title.bottom + 10.f;
|
||||
_subTitle.width = 250.f;
|
||||
_subTitle.height = 13.f;
|
||||
_subTitle.centerX = self.width * .5f;
|
||||
|
||||
_audioConversationLable.top = _subTitle.bottom + 20.f;
|
||||
_audioConversationLable.width = 150.f;
|
||||
_audioConversationLable.height = labelHight;
|
||||
_audioConversationLable.left = leftMarigin;
|
||||
|
||||
_myMediaLable.top = _audioConversationLable.bottom + 20.f;
|
||||
_myMediaLable.width = 150.f;
|
||||
_myMediaLable.height = labelHight;
|
||||
_myMediaLable.left = leftMarigin;
|
||||
|
||||
_otherSideMediaLable.top = _myMediaLable.bottom + 20.f;
|
||||
_otherSideMediaLable.width = 150.f;
|
||||
_otherSideMediaLable.height = labelHight;
|
||||
_otherSideMediaLable.left = leftMarigin;
|
||||
|
||||
_audioConversation.width = 23.f;
|
||||
_audioConversation.height = 23.f;
|
||||
_audioConversation.right = self.width -rightMarigin;
|
||||
_audioConversation.centerY = _audioConversationLable.centerY;
|
||||
|
||||
_myMediaButton.width = 23.f;
|
||||
_myMediaButton.height = 23.f;
|
||||
_myMediaButton.right = self.width -rightMarigin;
|
||||
_myMediaButton.centerY = _myMediaLable.centerY;
|
||||
|
||||
_otherSideMediaButton.width = 23.f;
|
||||
_otherSideMediaButton.height = 23.f;
|
||||
_otherSideMediaButton.right = self.width -rightMarigin;
|
||||
_otherSideMediaButton.centerY = _otherSideMediaLable.centerY;
|
||||
|
||||
_horizontalSplitLine.top = _otherSideMediaButton.bottom + 25.f;
|
||||
_horizontalSplitLine.width = self.width;
|
||||
_horizontalSplitLine.height = .5f;
|
||||
_horizontalSplitLine.centerX = self.width * .5f;
|
||||
|
||||
_cancelButton.width = self.width/2;
|
||||
_cancelButton.height = self.height - _horizontalSplitLine.bottom;
|
||||
_cancelButton.left = 0;
|
||||
_cancelButton.bottom = self.height;
|
||||
|
||||
_verticalSplitLine.width = .5f;
|
||||
_verticalSplitLine.height = self.height - _horizontalSplitLine.bottom;
|
||||
_verticalSplitLine.left = _cancelButton.right;
|
||||
_verticalSplitLine.bottom = self.height;
|
||||
|
||||
_startButton.width = self.width/2;
|
||||
_startButton.height = self.height - _horizontalSplitLine.bottom;
|
||||
_startButton.right = self.width ;
|
||||
_startButton.bottom = self.height;
|
||||
|
||||
}
|
||||
|
||||
-(void)audioConversationPressed
|
||||
{
|
||||
_audioConversation.selected = !_audioConversation.selected;
|
||||
[self updateStartButton];
|
||||
}
|
||||
|
||||
-(void)myMediaPressed
|
||||
{
|
||||
_myMediaButton.selected = !_myMediaButton.selected;
|
||||
[self updateStartButton];
|
||||
}
|
||||
|
||||
-(void)otherSideMediaPressed
|
||||
{
|
||||
_otherSideMediaButton.selected = !_otherSideMediaButton.selected;
|
||||
[self updateStartButton];
|
||||
}
|
||||
|
||||
-(void)cancelButtonPressed
|
||||
{
|
||||
//先全部设为未选中状态
|
||||
_audioConversation.selected = NO;
|
||||
_myMediaButton.selected = NO;
|
||||
_otherSideMediaButton.selected = NO;
|
||||
[self updateStartButton];
|
||||
[self removeFromSuperview];
|
||||
}
|
||||
|
||||
-(void)startButtonPressed
|
||||
{
|
||||
if (_delegate&&[_delegate respondsToSelector:@selector(onRecordWithAudioConversation:myMedia:otherSideMedia:)]) {
|
||||
[_delegate onRecordWithAudioConversation:_audioConversation.selected
|
||||
myMedia:_myMediaButton.selected
|
||||
otherSideMedia:_otherSideMediaButton.selected];
|
||||
}
|
||||
_audioConversation.selected = NO;
|
||||
_myMediaButton.selected = NO;
|
||||
_otherSideMediaButton.selected = NO;
|
||||
[self updateStartButton];
|
||||
[self removeFromSuperview];
|
||||
}
|
||||
|
||||
-(void)updateStartButton
|
||||
{
|
||||
if (!_otherSideMediaButton.selected&&!_audioConversation.selected&&!_myMediaButton.selected) {
|
||||
_startButton.enabled = NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
_startButton.enabled = YES;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
//
|
||||
// NTESVideoChatNetStateView.h
|
||||
// NIM
|
||||
//
|
||||
// Created by chris on 15/5/20.
|
||||
// Copyright (c) 2015年 Netease. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface NTESVideoChatNetStatusView : UIView
|
||||
|
||||
- (void)refreshWithNetState:(NIMNetCallNetStatus)status;
|
||||
|
||||
@end
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// VideoChatNetStateView.m
|
||||
// NIM
|
||||
//
|
||||
// Created by chris on 15/5/20.
|
||||
// Copyright (c) 2015年 Netease. All rights reserved.
|
||||
//
|
||||
|
||||
#import "NTESVideoChatNetStatusView.h"
|
||||
#import "UIView+NTES.h"
|
||||
|
||||
@interface NTESVideoChatNetStatusView()
|
||||
|
||||
@property (nonatomic,strong) UIImageView *statusImageView;
|
||||
|
||||
@property (nonatomic,strong) UILabel *statusLabel;
|
||||
|
||||
@end
|
||||
|
||||
@implementation NTESVideoChatNetStatusView
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self setup];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)awakeFromNib{
|
||||
[super awakeFromNib];
|
||||
[self setup];
|
||||
}
|
||||
|
||||
- (void)setup{
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
_statusImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
|
||||
_statusImageView.hidden = YES;
|
||||
_statusLabel = [[UILabel alloc] initWithFrame:CGRectZero];
|
||||
_statusLabel.hidden = YES;
|
||||
_statusLabel.backgroundColor = [UIColor clearColor];
|
||||
_statusLabel.textColor = UIColorFromRGB(0xffffff);
|
||||
_statusLabel.font = [UIFont systemFontOfSize:16.f];
|
||||
[self addSubview:_statusImageView];
|
||||
[self addSubview:_statusLabel];
|
||||
}
|
||||
|
||||
|
||||
- (void)refreshWithNetState:(NIMNetCallNetStatus)status{
|
||||
NSString *prefix = @"netstat_";
|
||||
NSString * imageName = [NSString stringWithFormat:@"%@%zd",prefix,status];
|
||||
self.statusImageView.image = [UIImage imageNamed:imageName];
|
||||
[self.statusImageView sizeToFit];
|
||||
self.statusLabel.hidden = NO;
|
||||
self.statusImageView.hidden = NO;
|
||||
NSString *netState;
|
||||
switch (status) {
|
||||
case NIMNetCallNetStatusVeryGood:
|
||||
netState = @"网络通畅:";
|
||||
break;
|
||||
case NIMNetCallNetStatusGood:
|
||||
netState = @"网络正常:";
|
||||
break;
|
||||
case NIMNetCallNetStatusBad:
|
||||
netState = @"网络一般:";
|
||||
break;
|
||||
case NIMNetCallNetStatusVeryBad:
|
||||
netState = @"网络较差:";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
self.statusLabel.text = netState;
|
||||
[self.statusLabel sizeToFit];
|
||||
}
|
||||
|
||||
- (void)layoutSubviews{
|
||||
[super layoutSubviews];
|
||||
self.statusLabel.centerY = self.height * .5f;
|
||||
self.statusImageView.right = self.width;
|
||||
self.statusImageView.centerY = self.height * .5f;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user