Files
ifish/Ifish/controllers/IfishTabControllers/消息/IfishIMFiles/Sessions/Chatroom/NTESLiveViewController.m
T
2017-08-15 16:59:01 +08:00

272 lines
8.4 KiB
Objective-C

//
// NTESLiveViewController.m
// NIM
//
// Created by chris on 15/12/16.
// Copyright © 2015年 Netease. All rights reserved.
//
#import "NTESLiveViewController.h"
#import "NTESChatroomSegmentedControl.h"
#import "UIView+NTES.h"
#import "NTESPageView.h"
#import "NTESChatroomViewController.h"
#import "NTESChatroomMemberListViewController.h"
#import "NTESLiveInfoViewController.h"
#import "UIImageView+WebCache.h"
#import "SVProgressHUD.h"
#import "UIImage+NTESColor.h"
#import "NTESLiveActionView.h"
#import "Toast+UIView.h"
@interface NTESLiveViewController ()<NTESLiveActionViewDataSource,NTESLiveActionViewDelegate,NIMInputDelegate,NIMChatroomManagerDelegate>
@property (nonatomic, copy) NIMChatroom *chatroom;
@property (nonatomic, strong) NTESChatroomViewController *chatroomViewController;
@property (nonatomic, strong) NTESLiveActionView *actionView;
@property (nonatomic, strong) UIImageView *liveImageView;
@property (nonatomic, assign) BOOL keyboradIsShown;
@property (nonatomic, weak) UIViewController *currentChildViewController;
@end
@implementation NTESLiveViewController
NTES_USE_CLEAR_BAR
- (instancetype)initWithChatroom:(NIMChatroom *)chatroom{
self = [super initWithNibName:nil bundle:nil];
if (self) {
_chatroom = chatroom;
}
return self;
}
- (void)dealloc{
[[NIMSDK sharedSDK].chatroomManager exitChatroom:_chatroom.roomId completion:nil];
[[NIMSDK sharedSDK].chatroomManager removeDelegate:self];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self setupChildViewController];
[self.view addSubview:self.liveImageView];
[self.view addSubview:self.actionView];
[self.actionView reloadData];
self.currentChildViewController = self.chatroomViewController;
[self revertInputView];
[self setupBackBarButtonItem];
[[NIMSDK sharedSDK].chatroomManager addDelegate:self];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent
animated:NO];
//self.chatroomViewController.delegate = self;
[self.currentChildViewController beginAppearanceTransition:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault
animated:NO];
//self.chatroomViewController.delegate = nil; //避免view不再顶层仍受到键盘回调,导致改变状态栏样式。
[self.currentChildViewController beginAppearanceTransition:NO animated:animated];
[self revertInputView];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[self.currentChildViewController endAppearanceTransition];
}
- (BOOL)shouldAutomaticallyForwardAppearanceMethods
{
return NO;
}
- (void)setupChildViewController
{
NSArray *vcs = [self makeChildViewControllers];
for (UIViewController *vc in vcs) {
[self addChildViewController:vc];
}
}
#pragma mark - NTESLiveActionViewDataSource
- (NSInteger)numberOfPages
{
return self.childViewControllers.count;
}
- (UIView *)viewInPage:(NSInteger)index
{
UIView *view = self.childViewControllers[index].view;
return view;
}
- (CGFloat)liveViewHeight
{
return self.liveImageView.height;
}
#pragma mark - NTESLiveActionViewDelegate
- (void)onSegmentControlChanged:(NTESChatroomSegmentedControl *)control
{
UIViewController *lastChild = self.currentChildViewController;
UIViewController *child = self.childViewControllers[self.actionView.segmentedControl.selectedSegmentIndex];
[lastChild beginAppearanceTransition:NO animated:YES];
[child beginAppearanceTransition:YES animated:YES];
[self.actionView.pageView scrollToPage:self.actionView.segmentedControl.selectedSegmentIndex];
dispatch_async(dispatch_get_main_queue(), ^{
self.currentChildViewController = child;
[lastChild endAppearanceTransition];
[child endAppearanceTransition];
[self revertInputView];
});
}
- (void)onTouchActionBackground
{
[self.chatroomViewController.sessionInputView endEditing:YES];
}
#pragma mark - Get
#define LiveViewDefaultHeight 239.f
- (CGFloat)liveImageViewHeight
{
return LiveViewDefaultHeight;
}
- (UIImageView *)liveImageView{
if (!self.isViewLoaded) {
return nil;
}
if (!_liveImageView) {
_liveImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.width,self.liveImageViewHeight)];
_liveImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
_liveImageView.contentMode = UIViewContentModeScaleAspectFill;
_liveImageView.clipsToBounds = YES;
NSInteger index = self.chatroom.roomId.hash % 8;
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"chatroom_cover_page_%zd",index]];
[_liveImageView sd_setImageWithURL:nil placeholderImage:image];
}
return _liveImageView;
}
- (NTESLiveActionView *)actionView
{
if (!self.isViewLoaded) {
return nil;
}
if (!_actionView) {
_actionView = [[NTESLiveActionView alloc] initWithDataSource:self];
_actionView.frame = self.view.bounds;
_actionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_actionView.delegate = self;
}
return _actionView;
}
#pragma mark - NIMInputDelegate
- (void)showInputView
{
if (!self.keyboradIsShown) {
self.keyboradIsShown = YES;
}
}
- (void)hideInputView
{
if (self.keyboradIsShown) {
self.keyboradIsShown = NO;
}
}
#pragma mark - NIMChatroomManagerDelegate
- (void)chatroom:(NSString *)roomId beKicked:(NIMChatroomKickReason)reason
{
if ([roomId isEqualToString:self.chatroom.roomId]) {
NSString *toast = [NSString stringWithFormat:@"你被踢出聊天室"];
NSLog(@"chatroom be kicked, roomId:%@ rease:%zd",roomId,reason);
[[NIMSDK sharedSDK].chatroomManager exitChatroom:roomId completion:nil];
[self.view.window makeToast:toast ];
[self.navigationController popViewControllerAnimated:YES];
}
}
- (void)chatroom:(NSString *)roomId connectionStateChanged:(NIMChatroomConnectionState)state;
{
NSLog(@"chatroom connectionStateChanged roomId : %@ state:%zd",roomId,state);
}
- (void)chatroom:(NSString *)roomId autoLoginFailed:(NSError *)error
{
NSString *toast = [NSString stringWithFormat:@"chatroom autoLoginFailed failed : %zd",error.code];
NSLog(@"%@",toast);
[[NIMSDK sharedSDK].chatroomManager exitChatroom:roomId completion:nil];
[self.view.window makeToast:toast];
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - Private
- (NSArray *)makeChildViewControllers{
self.chatroomViewController = [[NTESChatroomViewController alloc] initWithChatroom:self.chatroom];
// self.chatroomViewController.delegate = self;
NTESChatroomMemberListViewController *memberListVC = [[NTESChatroomMemberListViewController alloc] initWithChatroom:self.chatroom];
NTESLiveInfoViewController *liveInfoVC = [[NTESLiveInfoViewController alloc] initWithChatroom:self.chatroom];
return @[self.chatroomViewController,liveInfoVC,memberListVC];
}
- (void)revertInputView
{
UIView *inputView = self.chatroomViewController.sessionInputView;
UIView *revertView;
if ([self.currentChildViewController isKindOfClass:[NTESChatroomViewController class]]) {
revertView = self.view;
}else{
revertView = self.chatroomViewController.view;
}
CGFloat height = revertView.height;
[revertView addSubview:inputView];
inputView.bottom = height;
}
- (void)setupBackBarButtonItem
{
UIImage *buttonNormal = [[UIImage imageNamed:@"chatroom_back_normal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *buttonSelected = [[UIImage imageNamed:@"chatroom_back_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[self.navigationController.navigationBar setBackIndicatorImage:buttonNormal];
[self.navigationController.navigationBar setBackIndicatorTransitionMaskImage:buttonSelected];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backItem;
}
#pragma mark - Rotate
- (BOOL)shouldAutorotate{
return NO;
}
@end