//
// RootMainViewController.m
// ZapyaGame
//
// Created by wangtao on 2018/3/20.
// Copyright © 2018年 wangtao. All rights reserved.
//
#import "RootMainViewController.h"
#import "DXCommenHelper.h"
#import "UIImage+WTAdd.h"
#import "ZGMyViewController.h"
#import "ZGImageManager.h"
#import "ZGLoginViewController.h"
#import "ZGUserManager.h"
#import <Masonry.h>
#import "UIView+ZWL.h"
#import "ZGGameListViewController.h"
#import "FindFriendPlayViewController.h"
#import "ZGConversationViewController.h"
#import "GameRankListViewController.h"
#import "ZGScrollHeaderView.h"
#import "MyScrollView.h"
#import "ZGUserManager.h"
@interface RootMainViewController ()<UIScrollViewDelegate>
@property (nonatomic, strong) MyScrollView *scrollView;
@property (nonatomic, strong) ZGScrollHeaderView *scrollHeader;
@property (nonatomic, assign) NSInteger selectedIndex;
@property (nonatomic, weak) ZGGameListViewController *gameList;
@property (nonatomic, weak) FindFriendPlayViewController *findFriend;
@property (nonatomic, weak) ZGConversationViewController *conversation;
@end
@implementation RootMainViewController
{
BOOL _showGameAndPlay;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
if (![[ZGUserManager shareInstance] ifIsLogin] && ![[ZGUserManager shareInstance] getMe].uid) {
ZGLoginViewController *LoginVC = [[ZGLoginViewController alloc]init];
[self.navigationController pushViewController:LoginVC animated:NO];
}
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self setNavNeedHidden:NO];
[self setNavBtn];
}
- (void)awakeFromNib{
[super awakeFromNib];
_showGameAndPlay = [[ZGUserManager shareInstance] isChecking];
}
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
[self scrollView];
[self setChildController];
}
- (ZGGameListViewController *)gameList{
if (!_gameList) {
ZGGameListViewController *gameList = [ZGGameListViewController new];
// gameList.view.frame = CGRectMake(0, 0, SCREEN_WIDTH, self.view.height);
[self.scrollView addSubview:gameList.view];
gameList.view.tag = 0;
[self addChildViewController:gameList];
[gameList.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.equalTo(self.scrollView);
make.width.equalTo(self.view);
make.bottom.equalTo(self.view);
}];
_gameList = gameList;
}
return _gameList;
}
- (FindFriendPlayViewController *)findFriend{
if (!_findFriend) {
@weakify(self)
FindFriendPlayViewController *findFriend = [FindFriendPlayViewController new];
findFriend.didAcceptGameInviteBlock = ^(ZGUserModel *recever, ZGGameModel *game) {
@strongify(self)
[self matchWithUser:recever game:game];
};
// findFriend.view.frame = CGRectMake(SCREEN_WIDTH, 0, SCREEN_WIDTH, self.view.height);
[self.scrollView addSubview:findFriend.view];
findFriend.view.tag = 1;
[self addChildViewController:findFriend];
[findFriend.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.scrollView);
make.left.equalTo(self.scrollView).offset(SCREEN_WIDTH);;
make.width.equalTo(self.view);
make.bottom.equalTo(self.view);
}];
_findFriend = findFriend;
}
return _findFriend;
}
- (ZGConversationViewController *)conversation{
if (!_conversation) {
ZGConversationViewController *conversation = [ZGConversationViewController new];
@weakify(self)
conversation.didAcceptGameInviteBlock = ^(ZGUserModel *recever, ZGGameModel *game) {
@strongify(self)
[self matchWithUser:recever game:game];
};
// conversation.view.frame = CGRectMake(SCREEN_WIDTH * 2, 0, SCREEN_WIDTH, self.view.height);
[self.scrollView addSubview:conversation.view];
conversation.view.tag = 2;
[self addChildViewController:conversation];
_conversation = conversation;
}
[_conversation.view mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.scrollView);
make.left.equalTo(self.scrollView).offset(_showGameAndPlay ? SCREEN_WIDTH * 2 : 0);
make.width.equalTo(self.view);
make.bottom.equalTo(self.view);
}];
return _conversation;
}
- (void)setChildController{
if (_showGameAndPlay) {
[self gameList];
[self findFriend];
}
[self conversation];
}
- (void)matchWithUser:(ZGUserModel *)user game:(ZGGameModel *)game{
self.selectedIndex = 0;
[self.scrollView setContentOffset:CGPointMake(0, 0)];
if (!self.gameList || !user || !game) return;
self.gameList.selectedGame = game;
self.gameList.uid = user.uid;
[self.gameList chooseGame];
}
-(void)setNavBtn{
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.contentMode = UIViewContentModeScaleAspectFill;
backBtn.frame = CGRectMake(0, 0, 24, 24);
if (@available(iOS 9.0, *)) {
[backBtn.heightAnchor constraintEqualToConstant:24].active = YES;
[backBtn.widthAnchor constraintEqualToConstant:24].active = YES;
} else {
// Fallback on earlier versions
}
backBtn.layer.cornerRadius = backBtn.frame.size.width/2;
backBtn.layer.masksToBounds = YES;
[backBtn setImage:[ZGCommonImagePlaceHolder imageByResizeToSize:CGSizeMake(24, 24)] forState:0];
if (ValidStr([ZGUserManager shareInstance].getMe.avurl)) {
[[ZGImageManager sharedMananger] cacheOrDownloadImage:[ZGUserManager shareInstance].getMe.avurl completeBlock:^(UIImage *img) {
dispatch_async_on_main_queue(^{
[backBtn setImage:img forState:0];
});
}];
}else{
[backBtn setBackgroundImage:[ZGCommonImagePlaceHolder imageByResizeToSize:CGSizeMake(24, 24)] forState:0];
}
[[ZGUserManager shareInstance].rac_loginStatusChange subscribeNext:^(id x) {
[backBtn setImage:[ZGCommonImagePlaceHolder imageByResizeToSize:CGSizeMake(24, 24)] forState:0];
if (ValidStr([ZGUserManager shareInstance].getMe.avurl)) {
[[ZGImageManager sharedMananger] cacheOrDownloadImage:[ZGUserManager shareInstance].getMe.avurl completeBlock:^(UIImage *img) {
dispatch_async_on_main_queue(^{
[backBtn setImage:img forState:0];
});
}];
}else{
[backBtn setBackgroundImage:[ZGCommonImagePlaceHolder imageByResizeToSize:CGSizeMake(24, 24)] forState:0];
}
}];
[backBtn addTarget:self action:@selector(myBtnClick:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
@weakify(self)
NSArray *array = _showGameAndPlay ? @[GSLocalString(@"StringHomeGame"), GSLocalString(@"StringGameMainFindFriendPlay"), GSLocalString(@"StringGameMainConversation")] : @[GSLocalString(@"StringGameMainConversation")];
_scrollHeader = [[ZGScrollHeaderView alloc] initWithNameArray:array selectedIndex:self.selectedIndex];
_scrollHeader.didClickTitleWithIndex = ^(NSUInteger index) {
@strongify(self)
[self.scrollView setContentOffset:CGPointMake(index * self.view.width, self.scrollView.contentOffset.y) animated:YES];
};
self.navigationItem.titleView = _scrollHeader;
}
- (IBAction)myBtnClick:(id)sender {
ZGMyViewController *myVC = [[ZGMyViewController alloc] initWithNibName:@"ZGMyViewController" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:myVC animated:YES];
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (MyScrollView *)scrollView{
if (!_scrollView) {
_scrollView = [MyScrollView new];
_scrollView.pagingEnabled = YES;
_scrollView.delegate = self;
_scrollView.bounces = NO;
_scrollView.backgroundColor = [UIColor clearColor];
// self.automaticallyAdjustsScrollViewInsets = NO;
[self.view addSubview:_scrollView];
}
_scrollView.contentSize = CGSizeMake(self.view.width * (_showGameAndPlay ? 3 : 1), self.view.height - SysNavHight);
_scrollView.frame = self.view.bounds;
return _scrollView;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (scrollView == _scrollView)
{
_gameList.gameCollectionView.scrollEnabled = YES;
_conversation.conversationTableView.scrollEnabled = YES;
}
NSInteger index = scrollView.contentOffset.x / scrollView.width;
self.selectedIndex = index;
[self.scrollView setContentOffset:CGPointMake(index * self.view.width, self.scrollView.contentOffset.y) animated:YES];
// NSLog(@"%ld", (long)index);
_scrollHeader.currentScrollPercent = scrollView.contentOffset.x / scrollView.width;
_scrollHeader.currentIndex = index;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView == _scrollView)
{
_gameList.gameCollectionView.scrollEnabled = NO;
_conversation.conversationTableView.scrollEnabled = NO;
}
NSInteger index = scrollView.contentOffset.x / scrollView.width;
self.selectedIndex = index;
_scrollHeader.currentScrollPercent = scrollView.contentOffset.x / scrollView.width;
}
@end
#import <UIKit/UIKit.h>
@interface MyScrollView : UIScrollView<UIGestureRecognizerDelegate>
@end
//
// MyScrollView.m
// ZapyaGame
//
// Created by wangtao on 2018/6/4.
// Copyright © 2018年 douglas. All rights reserved.
//
#import "MyScrollView.h"
//https://blog.csdn.net/chenyong05314/article/details/50072531
@implementation MyScrollView
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer.state != 0) {
return YES;
} else {
return NO;
}
}
//https://xidazheng.com/2016/10/21/how-ios-handles-touches-responder-chain-touch-event-handling-gesture-recognizers-scrollviews/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
UIView *view = touch.view;
if (view.frame.size.height == 110) { /// 高度为找人玩顶部最近匹配uicollectionview的高度
return NO;
}
return YES;
}
// Allows inner UITableView swipe-to-delete gesture
//- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(nonnull UIGestureRecognizer *)otherGestureRecognizer
//{
//// UIScrollViewPanGestureRecognizer;
//// return [otherGestureRecognizer.view isKindOfClass:[UITableView class]];
// if (gestureRecognizer.state != 0) {
// return YES;
// } else {
// return NO;
// }
//}
//- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
//{
// [self.nextResponder touchesBegan:touches withEvent:event];
//}
//
//- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
//{
// if(!self.dragging)
// {
// [self.nextResponder touchesMoved:touches withEvent:event];
// }
//}
//
//- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
//{
// [self.nextResponder touchesEnded:touches withEvent:event];
//}
@end
0 Comments latest
No comments.