覆盖羽声
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
self.bgImaegView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||
self.bgImaegView.image = [UIImage imageNamed:@"启动页"];;
|
||||
self.bgImaegView.image = [UIImage imageNamed:@"app_start_midi1"];;
|
||||
self.bgImaegView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
[self.view addSubview:self.bgImaegView];
|
||||
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginSuccess) name:noticeUserLogin object:nil];
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
|
||||
if (self.childViewControllers.count > 1) {
|
||||
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
|
||||
if ([self.visibleViewController isKindOfClass:NSClassFromString(@"QXRoomViewController")]) {
|
||||
if ([self.visibleViewController isKindOfClass:NSClassFromString(@"QXRoomViewController")] || [self.visibleViewController isKindOfClass:NSClassFromString(@"QXChirldViewController")]) {
|
||||
self.interactivePopGestureRecognizer.enabled = NO;
|
||||
}else{
|
||||
self.interactivePopGestureRecognizer.enabled = YES;
|
||||
|
||||
@@ -15,16 +15,6 @@
|
||||
|
||||
typedef void (^closeBlock)(void);
|
||||
typedef void (^showFinishBlock)(void);
|
||||
typedef NS_ENUM(NSInteger) {
|
||||
/// 房主
|
||||
QXRoomRoleTypeOwner = 0,
|
||||
/// 主持
|
||||
QXRoomRoleTypeCompere,
|
||||
/// 管理员
|
||||
QXRoomRoleTypeManager,
|
||||
/// 观众
|
||||
QXRoomRoleTypeAudience,
|
||||
}QXRoomRoleType;
|
||||
|
||||
|
||||
@interface QXGlobal : NSObject
|
||||
@@ -57,6 +47,10 @@ typedef NS_ENUM(NSInteger) {
|
||||
|
||||
@property (nonatomic,strong) QXRoomViewController *roomVC;
|
||||
|
||||
@property (nonatomic,strong) NSMutableDictionary *offLineDict;
|
||||
|
||||
@property (nonatomic,strong)NSString *superRoomId;
|
||||
|
||||
-(void)miniRoomWithRoomId:(NSString*)roomId roomCover:(NSString*)roomCover;
|
||||
|
||||
|
||||
|
||||
@@ -20,11 +20,14 @@
|
||||
#import "QXTimer.h"
|
||||
#import <TIMPush/TIMPushManager.h>
|
||||
#import "QXManagerMqtt.h"
|
||||
#import "QXRedPacketManager.h"
|
||||
|
||||
@interface QXGlobal()
|
||||
@property (nonatomic,assign)BOOL isLogin;
|
||||
@property (nonatomic,strong)NSString *roomId;
|
||||
|
||||
@property (nonatomic,assign)BOOL isClickJoinRoom;
|
||||
|
||||
@property (nonatomic,strong)QXTimer *timer;
|
||||
@property (nonatomic,assign)NSInteger taskTime;
|
||||
@end
|
||||
@@ -193,6 +196,7 @@
|
||||
[[QXGlobal shareGlobal] logOut];
|
||||
return;
|
||||
}
|
||||
|
||||
navagationController = (QXBaseNavigationController*)KEYWINDOW.rootViewController;
|
||||
// navagationController.interactivePopGestureRecognizer.enabled = NO;
|
||||
if (_miniView) {
|
||||
@@ -203,7 +207,9 @@
|
||||
if ([navagationController.viewControllers containsObject:self.roomVC]) {
|
||||
return;
|
||||
}else{
|
||||
[UIApplication sharedApplication].idleTimerDisabled = YES;
|
||||
self.roomVC.hidesBottomBarWhenPushed = YES;
|
||||
[self.roomVC playHWDMP4];
|
||||
[navagationController pushViewController:self.roomVC animated:YES];
|
||||
}
|
||||
return;
|
||||
@@ -211,28 +217,68 @@
|
||||
if (self.roomId && ![self.roomId isEqualToString:roomId]) {
|
||||
[self quitRoomWithRoomId:self.roomId];
|
||||
}
|
||||
[UIApplication sharedApplication].idleTimerDisabled = YES;
|
||||
MJWeakSelf
|
||||
if (isRejoin) {
|
||||
if (self.roomVC!=nil) {
|
||||
[self.roomVC playHWDMP4];
|
||||
self.roomVC.hidesBottomBarWhenPushed = YES;
|
||||
[navagationController pushViewController:self.roomVC animated:YES];
|
||||
}else{
|
||||
self.roomVC = [[QXRoomViewController alloc] init];
|
||||
self.roomVC.roomId = roomId;
|
||||
self.roomVC.isReJoin = isRejoin;
|
||||
self.roomId = roomId;
|
||||
self.roomVC.hidesBottomBarWhenPushed = YES;
|
||||
[navagationController pushViewController:self.roomVC animated:YES];
|
||||
if (weakSelf.isClickJoinRoom) {
|
||||
return;
|
||||
}
|
||||
// showLoadingInView(KEYWINDOW)
|
||||
weakSelf.isClickJoinRoom = YES;
|
||||
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
|
||||
[QXMineNetwork joinRoomWithRoomId:roomId successBlock:^(QXRoomModel * _Nonnull roomModel) {
|
||||
[UIApplication sharedApplication].idleTimerDisabled = YES;
|
||||
// hideLoadingInView(KEYWINDOW)
|
||||
// roomModel.room_info.pk_room_id = @"33";
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
weakSelf.roomVC = [[QXRoomViewController alloc] init];
|
||||
weakSelf.roomVC.roomId = roomId;
|
||||
weakSelf.roomVC.isReJoin = isRejoin;
|
||||
weakSelf.roomId = roomId;
|
||||
weakSelf.roomVC.roomModel = roomModel;
|
||||
weakSelf.roomVC.hidesBottomBarWhenPushed = YES;
|
||||
[navagationController pushViewController:weakSelf.roomVC animated:YES];
|
||||
weakSelf.roomId = roomId;
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
showToast(msg);
|
||||
// hideLoadingInView(KEYWINDOW)
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
}];
|
||||
}
|
||||
}else{
|
||||
if ([roomId isEqualToString:self.roomVC.roomId]) {
|
||||
[self.roomVC playHWDMP4];
|
||||
[navagationController pushViewController:self.roomVC animated:YES];
|
||||
}else{
|
||||
self.roomVC = [[QXRoomViewController alloc] init];
|
||||
self.roomVC.roomId = roomId;
|
||||
self.roomVC.isReJoin = isRejoin;
|
||||
self.roomId = roomId;
|
||||
self.roomVC.hidesBottomBarWhenPushed = YES;
|
||||
[navagationController pushViewController:self.roomVC animated:YES];
|
||||
// showLoadingInView(KEYWINDOW)
|
||||
if (weakSelf.isClickJoinRoom) {
|
||||
return;
|
||||
}
|
||||
weakSelf.isClickJoinRoom = YES;
|
||||
[[QXRoomMessageManager shared] joinGroupWithRoomId:roomId];
|
||||
[QXMineNetwork joinRoomWithRoomId:roomId successBlock:^(QXRoomModel * _Nonnull roomModel) {
|
||||
// hideLoadingInView(KEYWINDOW)
|
||||
// roomModel.room_info.pk_room_id = @"33";
|
||||
[UIApplication sharedApplication].idleTimerDisabled = YES;
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
weakSelf.roomVC = [[QXRoomViewController alloc] init];
|
||||
weakSelf.roomVC.roomId = roomId;
|
||||
weakSelf.roomVC.isReJoin = isRejoin;
|
||||
weakSelf.roomId = roomId;
|
||||
weakSelf.roomVC.roomModel = roomModel;
|
||||
weakSelf.roomVC.hidesBottomBarWhenPushed = YES;
|
||||
[navagationController pushViewController:weakSelf.roomVC animated:YES];
|
||||
weakSelf.roomId = roomId;
|
||||
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
|
||||
weakSelf.isClickJoinRoom = NO;
|
||||
showToast(msg);
|
||||
// hideLoadingInView(KEYWINDOW)
|
||||
}];
|
||||
}
|
||||
}
|
||||
if (QXGlobal.shareGlobal.taskModel != nil) {
|
||||
@@ -253,16 +299,27 @@
|
||||
|
||||
|
||||
-(void)quitRoomWithRoomId:(NSString *)roomId{
|
||||
[UIApplication sharedApplication].idleTimerDisabled = NO;
|
||||
/// 移除所有红包
|
||||
[[QXRedPacketManager sharedManager] destoryRedpacketInfo];
|
||||
/// 移除特效
|
||||
[[QXGiftPlayerManager shareManager] destroyEffectSvga];
|
||||
/// 退出声网
|
||||
[[QXAgoraEngine sharedEngine] leaveChannel];
|
||||
|
||||
/// 销毁播放器
|
||||
[[QXAgoraEngine sharedEngine] ktv_DestoryKtvPlayer];
|
||||
|
||||
/// 销毁整个声网示例
|
||||
[[QXAgoraEngine sharedEngine] destroyEngine];
|
||||
/// 退出直播群
|
||||
[[QXRoomMessageManager shared] quitGroupWithRoomId:roomId];
|
||||
[[QXGlobal shareGlobal].offLineDict removeAllObjects];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
if (_roomVC) {
|
||||
/// 回收麦位视图内存
|
||||
[_roomVC.seatContentView destroyViews];
|
||||
/// 回收控制器内存
|
||||
[_roomVC destroyViews];
|
||||
}
|
||||
self.roomId = nil;
|
||||
_roomVC = nil;
|
||||
/// 业务http退出
|
||||
@@ -294,4 +351,10 @@
|
||||
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleHeavy];
|
||||
[generator impactOccurred];
|
||||
}
|
||||
-(NSMutableDictionary *)offLineDict{
|
||||
if (!_offLineDict) {
|
||||
_offLineDict = [NSMutableDictionary dictionary];
|
||||
}
|
||||
return _offLineDict;
|
||||
}
|
||||
@end
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
//
|
||||
// QXLocationManager.h
|
||||
// YSDTrucksProject
|
||||
//
|
||||
// Created by 党凯 on 2020/7/17.
|
||||
// Copyright © 2020 党凯. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@protocol QXLocationManagerDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
-(void)locationSuccessWithCity:(NSString*_Nonnull)city province:(NSString*_Nonnull)province area:(NSString*_Nonnull)area address:(NSString*_Nonnull)address;
|
||||
|
||||
@end
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface QXLocationManager : NSObject
|
||||
@property (nonatomic,weak)id<QXLocationManagerDelegate>delegate;
|
||||
|
||||
+(instancetype)shareManager;
|
||||
|
||||
/**
|
||||
开始定位
|
||||
*/
|
||||
-(void)startLoction;
|
||||
|
||||
|
||||
/**
|
||||
结束定位
|
||||
*/
|
||||
-(void)stopLoction;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,155 +0,0 @@
|
||||
//
|
||||
// QXLocationManager.m
|
||||
// YSDTrucksProject
|
||||
//
|
||||
// Created by 党凯 on 2020/7/17.
|
||||
// Copyright © 2020 党凯. All rights reserved.
|
||||
//
|
||||
|
||||
#import "QXLocationManager.h"
|
||||
|
||||
|
||||
@interface QXLocationManager()<CLLocationManagerDelegate>
|
||||
@property (nonatomic,strong)CLLocationManager *lcManager;
|
||||
@end
|
||||
@implementation QXLocationManager
|
||||
+(instancetype)shareManager{
|
||||
static QXLocationManager *manager = nil;
|
||||
static dispatch_once_t predicate;
|
||||
dispatch_once(&predicate, ^{
|
||||
manager = [[QXLocationManager alloc] init];
|
||||
});
|
||||
return manager;
|
||||
}
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
// [AMapServices sharedServices].apiKey = mapKey;
|
||||
// _locationManager = [[AMapLocationManager alloc] init];
|
||||
// // 带逆地理信息的一次定位(返回坐标和地址信息)
|
||||
// [_locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
|
||||
// // 定位超时时间,最低2s,此处设置为2s
|
||||
// _locationManager.locationTimeout =2;
|
||||
// // 逆地理请求超时时间,最低2s,此处设置为2s
|
||||
// _locationManager.reGeocodeTimeout = 2;
|
||||
// _locationManager.delegate = self;
|
||||
// if ([CLLocationManager authorizationStatus]) {
|
||||
|
||||
// 创建位置管理者对象
|
||||
|
||||
self.lcManager = [[CLLocationManager alloc] init];
|
||||
|
||||
self.lcManager.delegate = self; // 设置代理
|
||||
|
||||
// 设置定位距离过滤参数 (当本次定位和上次定位之间的距离大于或等于这个值时,调用代理方法)
|
||||
|
||||
self.lcManager.distanceFilter = 100;
|
||||
|
||||
self.lcManager.desiredAccuracy = kCLLocationAccuracyBest; // 设置定位精度(精度越高越耗电)
|
||||
|
||||
[self.lcManager requestWhenInUseAuthorization];//这句很关键!!!
|
||||
|
||||
// [self.lcManager startUpdatingLocation]; // 开始更新位置
|
||||
|
||||
// }else{
|
||||
//
|
||||
// //没开启,做其他提醒
|
||||
//
|
||||
// }
|
||||
}
|
||||
return self;
|
||||
}
|
||||
//-(void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager *)locationManager{
|
||||
// if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {
|
||||
// [locationManager requestAlwaysAuthorization];
|
||||
// }
|
||||
//}
|
||||
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
|
||||
NSLog(@"定位到了");
|
||||
|
||||
__weak typeof(self)weakSelf = self;
|
||||
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
|
||||
[geocoder reverseGeocodeLocation:[locations firstObject] completionHandler:^(NSArray<CLPlacemark *> *_Nullable placemarks, NSError * _Nullable error) {
|
||||
|
||||
CLPlacemark *place = [placemarks firstObject];
|
||||
//place包含了地理信息
|
||||
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(locationSuccessWithCity:province:area:address:)]) {
|
||||
/// 省
|
||||
NSString *province = place.administrativeArea;
|
||||
/// 市
|
||||
NSString *city = place.locality;
|
||||
/// 县
|
||||
NSString *area = place.subLocality;
|
||||
[weakSelf.delegate locationSuccessWithCity:place.locality province:province area:area address:place.name];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
|
||||
NSLog(@"获取定位失败");
|
||||
}
|
||||
|
||||
-(void)startLoction{
|
||||
if (![self checkAuthorization]) {
|
||||
UIAlertController *al = [UIAlertController alertControllerWithTitle:@"您没有打开定位权限" message:nil preferredStyle:(UIAlertControllerStyleAlert)];
|
||||
[al addAction:[UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {
|
||||
|
||||
}]];
|
||||
[al addAction:[UIAlertAction actionWithTitle:@"去设置" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
|
||||
//打开应用的设置界面
|
||||
NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
|
||||
if([[UIApplication sharedApplication] canOpenURL:url]) {
|
||||
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
|
||||
}
|
||||
}]];
|
||||
[KEYWINDOW.rootViewController presentViewController:al animated:YES completion:nil];
|
||||
// [self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
|
||||
// resultBlock(location,regeocode,error);
|
||||
// }];
|
||||
[self.lcManager startUpdatingLocation];
|
||||
}else{
|
||||
// [self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
|
||||
// resultBlock(location,regeocode,error);
|
||||
// }];
|
||||
[self.lcManager startUpdatingLocation];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(void)stopLoction{
|
||||
[self.lcManager stopUpdatingLocation];
|
||||
}
|
||||
//检查定位权限
|
||||
-(BOOL)checkAuthorization{
|
||||
BOOL result = NO;
|
||||
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
|
||||
switch (status) {
|
||||
//用户在设置中关闭定位功能,或者用户明确的在弹框之后选择禁止定位
|
||||
case kCLAuthorizationStatusDenied:
|
||||
result = NO;
|
||||
break;
|
||||
//用户没有选择是否要使用定位服务(弹框没选择,或者根本没有弹框)注:高德会自动请求权限
|
||||
case kCLAuthorizationStatusNotDetermined:
|
||||
result = YES;
|
||||
break;
|
||||
//定位服务授权状态受限制,可能由于活动限制了定位服务,并且用户不能改变当前的权限,这个状态有可能不是用户拒绝的,但是也有可能是用户拒绝的。
|
||||
case kCLAuthorizationStatusRestricted:
|
||||
result = NO;
|
||||
break;
|
||||
//App始终允许使用定位功能
|
||||
case kCLAuthorizationStatusAuthorizedAlways:
|
||||
result = YES;
|
||||
break;
|
||||
//用户在使用期间允许使用定位功能
|
||||
case kCLAuthorizationStatusAuthorizedWhenInUse:
|
||||
result = YES;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user