AJ学IOS 之ipad开发qq空间项目横竖屏幕适配
来源:互联网 发布:php连接数据库 编辑:程序博客网 时间:2024/05/18 15:57
AJ分享,必须精品
一:效果图
先看效果
二:结构图
如图所示:
其中用到了UIView+extension分类
Masonry第三方框架做子控制器的适配
NYHomeViewController对应主页也就是全部
NYDock是左边的菜单栏 放置各个选项卡等按钮功能区域
NYIconView头像
NYTabBar选项卡
NYToolBar最下面的功能区
NYTabBarButton自定义的tabbar按钮,为了让在横竖屏下面分别显示不同的样式
三:源码
NYHomeViewController
//// NYHomeViewController.m// QQ空间 横竖屏适配//// Created by apple on 15/10/17.// Copyright (c) 2015年 apple. All rights reserved.//#import "NYHomeViewController.h"#import "NYDock.h"#import "NYConst.h"#import "Masonry.h"@interface NYHomeViewController ()@property (nonatomic, weak) NYDock *dock;/** * 正在显示的控制器 */@property (nonatomic, weak) UIViewController *showingChildVc;@end@implementation NYHomeViewController-(NYDock *)dock{ if (!_dock) { //创建dock NYDock *dock = [[NYDock alloc]init]; [self.view addSubview:dock]; self.dock = dock; } return _dock;}- (void)viewDidLoad { [super viewDidLoad]; //设置背景色 self.view.backgroundColor = NYColor(55, 55, 55); //初始化子控制器 [self setupChildVcs]; //接受通知 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(tabBarDidSelect:) name:NYTabBarDidSelectNotification object:nil]; //根据屏幕方向控制dock属性 [self willAnimateRotationToInterfaceOrientation:self.interfaceOrientation duration:0];}- (void)setupChildVcs{ for (int i = 0; i < 6; i++) { UIViewController *vc = [[UIViewController alloc]init]; vc.view.backgroundColor = NYRandomColor; [self addChildViewController:vc]; } //设置第一个为默认选中 [self switchChildVc:0];}/** * 切换子控制器 * * @param index 控制器索引 */- (void)switchChildVc:(int)index{ //移除当前正在显示的子控制器 [self.showingChildVc.view removeFromSuperview]; //显示index对应的子控制器 UIViewController *newChildVc = self.childViewControllers[index]; [self.view addSubview:newChildVc.view]; self.showingChildVc = newChildVc; // 添加约束 [newChildVc.view mas_makeConstraints:^(MASConstraintMaker *make) { // make.width.mas_equalTo(600); make.right.equalTo(self.view.mas_right); make.top.equalTo(self.view.mas_top); make.bottom.equalTo(self.view.mas_bottom); make.left.equalTo(self.dock.mas_right); }];}- (void)tabBarDidSelect:(NSNotification *)notification{ int index = [notification.userInfo[NYTabBarDidSelectIndex] intValue]; [self switchChildVc:index];}-(void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self];}/**当设备旋转时候调用*/- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {//横屏 self.dock.width = NYDockLW; self.dock.height = NYScreenPW; }else{//竖屏 self.dock.width = NYDockPW; self.dock.height = NYScreenLW; }}//-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator//{// self.dock.width = size.width;// self.dock.height = size.height;//}@end
Dock
//// NYDock.m// QQ空间 横竖屏适配//// Created by apple on 15/10/17.// Copyright (c) 2015年 apple. All rights reserved.//#import "NYDock.h"#import "NYIconView.h"#import "NYTabBar.h"#import "NYToolBar.h"#import "NYConst.h"@interface NYDock()@property (nonatomic, weak) NYIconView *iconView;@property (nonatomic, weak) NYTabBar *tabBarView;@property (nonatomic, weak) NYToolBar *toolBarView;@end@implementation NYDock-(instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { //1.头像 NYIconView *iconView = [[NYIconView alloc]init]; [self addSubview:iconView]; self.iconView = iconView;// iconView.backgroundColor = [UIColor grayColor]; //2.tobBar NYTabBar *tabBarView = [[NYTabBar alloc]init]; [self addSubview:tabBarView]; self.tabBarView = tabBarView;// tabBarView.backgroundColor = [UIColor grayColor]; //3.toolBar NYToolBar *toolBarView = [[NYToolBar alloc]init]; [self addSubview:toolBarView];// toolBarView.backgroundColor = [UIColor grayColor]; self.toolBarView = toolBarView; } return self;}-(void)layoutSubviews{ [super layoutSubviews]; self.toolBarView.width = self.width; self.tabBarView.width = self.width; self.tabBarView.height = NYDockPW * 6; if (Lanscape) {//横 self.toolBarView.height = self.width / 3; self.toolBarView.y = self.height - self.toolBarView.height; self.tabBarView.y = self.toolBarView.y - self.tabBarView.height; //头像位置 self.iconView.x = (self.width - self.iconView.width) * 0.5; self.iconView.y = self.iconView.x; self.iconView.width = self.width *0.4; self.iconView.height = self.iconView.width + 20; }else {//竖 self.toolBarView.height = self.width * 3; self.toolBarView.y = self.height - self.toolBarView.height; self.tabBarView.y = self.toolBarView.y - self.tabBarView.height; //头像位置 self.iconView.x = 5; self.iconView.y = 50; self.iconView.width = self.width - 5; self.iconView.height = self.iconView.width; }}@end
IconView
//// NYIconView.m// QQ空间 横竖屏适配//// Created by apple on 15/10/18.// Copyright (c) 2015年 apple. All rights reserved.//#import "NYIconView.h"#import "NYConst.h"@implementation NYIconView-(instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { [self setImage:[UIImage imageNamed:@"cat"] forState:UIControlStateNormal ]; [self setTitle:@"znycat" forState:UIControlStateNormal]; self.titleLabel.textAlignment = NSTextAlignmentCenter; self.imageView.layer.cornerRadius = 10; } return self;}-(void)layoutSubviews{ [super layoutSubviews]; if (Lanscape) { self.titleLabel.hidden = NO; self.imageView.width = self.width; self.imageView.height = self.width; self.imageView.y = 0; self.imageView.x = 0; self.titleLabel.width = self.width; self.titleLabel.height = self.height - self.width; self.titleLabel.y = self.width + 4; self.titleLabel.x = 0; }else{ self.titleLabel.hidden = YES; self.imageView.bounds = self.bounds; }}@end
xtabBarView
//// NYTabBar.m// QQ空间 横竖屏适配//// Created by apple on 15/10/18.// Copyright (c) 2015年 apple. All rights reserved.//#import "NYTabBar.h"#import "NYTabBarButton.h"@interface NYTabBar()@property (nonatomic, weak) NYTabBarButton *selectedBtn;@end@implementation NYTabBar-(id)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { //创建按钮 self.selectedBtn = [self setupButton:@"tabbar_photo"title:@"111"]; self.selectedBtn.enabled = NO; [self setupButton:@"tabbar_mood"title:@"222"]; [self setupButton:@"tabbar_blog"title:@"333"]; [self setupButton:@"tabbar_photo"title:@"444"]; [self setupButton:@"tabbar_mood"title:@"555"]; [self setupButton:@"tabbar_blog"title:@"666"]; } return self;}/** * 创建按钮 */- (NYTabBarButton *) setupButton:(NSString *)icon title:(NSString *)title{ NYTabBarButton *button = [[NYTabBarButton alloc]init]; [button setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal]; [button setTitle:title forState:UIControlStateNormal]; [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];// button.contentMode(image的是contentModel)对内容无用 [self addSubview:button]; return button;}-(void)layoutSubviews{ [super layoutSubviews]; int count = self.subviews.count; for (int i = 0 ; i<count; i++) { NYTabBarButton *btn = self.subviews[i]; btn.height = self.height / count; btn.width = self.width ; btn.x = 0; btn.y = btn.height * i; btn.tag = i; if (Lanscape) { btn.contentEdgeInsets = UIEdgeInsetsMake(0, 30, 0, 0); }else{ btn.contentEdgeInsets = UIEdgeInsetsMake(0, 15, 0, 0); } }}-(void)btnClick:(NYTabBarButton *)btn{ self.selectedBtn.enabled = YES; btn.enabled = NO; self.selectedBtn = btn; //发送通知 [[NSNotificationCenter defaultCenter] postNotificationName:NYTabBarDidSelectNotification object:nil userInfo:@{NYTabBarDidSelectIndex:@(btn.tag)}];}@end
TabBarButton
//// NYTabBarButton.m// QQ空间 横竖屏适配//// Created by apple on 15/10/18.// Copyright (c) 2015年 apple. All rights reserved.//#import "NYTabBarButton.h"@implementation NYTabBarButton-(instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { [self setBackgroundImage:[UIImage imageNamed:@"tabbar_separate_selected_bg"] forState:UIControlStateDisabled];// 让图片不要拉伸 self.imageView.contentMode = UIViewContentModeCenter; //不能选中和高亮时候的灰色去掉 self.adjustsImageWhenDisabled = NO; self.adjustsImageWhenHighlighted = NO;// //设置按钮的内容样式向左边对其// self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;// // // 切割间距内边距// self.contentEdgeInsets = UIEdgeInsetsMake(0, 30, 0, 0);// self.titleEdgeInsets = UIEdgeInsetsMake(0, 30, 0, 0); } return self;}-(void)setHighlighted:(BOOL)highlighted{}- (void)layoutSubviews{ [super layoutSubviews]; if (Lanscape) { self.imageView.height = self.height; self.imageView.width = self.width * 0.4; self.imageView.x = 0; self.imageView.y = 0; self.titleLabel.hidden = NO; self.titleLabel.y = 0; self.titleLabel.x = self.imageView.width; self.titleLabel.width = self.width - self.imageView.width; self.titleLabel.height = self.height; } else { self.titleLabel.hidden = YES; // 如果设置宽度或者高度为0,某个控件还是会显示一部分, 可以尝试设置控件的width或者height为负数 // self.titleLabel.frame = CGRectMake(0, 0, -1, 0); self.imageView.frame = self.bounds; }}@end
ToolBarView
//// NYToolBar.m// QQ空间 横竖屏适配//// Created by apple on 15/10/18.// Copyright (c) 2015年 apple. All rights reserved.//#import "NYToolBar.h"@implementation NYToolBar-(id)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { //创建按钮 [self setupButton:@"tabbar_photo"]; [self setupButton:@"tabbar_mood"]; [self setupButton:@"tabbar_blog"]; } return self;}/** * 创建按钮 */- (UIButton *) setupButton:(NSString *)icon{ UIButton *button = [[UIButton alloc]init]; [button setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal]; [button setImage:[UIImage imageNamed:@"tabbar_separate_selected_bg"] forState:UIControlStateSelected]; [self addSubview:button]; return button;}-(void)layoutSubviews{ [super layoutSubviews]; int count = self.subviews.count; if (Lanscape) { for (int i = 0 ; i<count; i++) { UIButton *btn = self.subviews[i]; btn.height = self.height; btn.width = self.width / count; btn.x = btn.width * i; btn.y = 0; } } else{ for (int i = 0 ; i<count; i++) { UIButton *btn = self.subviews[i]; btn.height = self.height / count; btn.width = self.width ; btn.x = 0; btn.y = btn.height * i; } }}@end
0 0
- AJ学IOS 之ipad开发qq空间项目横竖屏幕适配
- 猫猫学iOS之ipad开发qq空间项目横竖屏幕适配
- iOS之ipad开发qq空间项目横竖屏幕适配
- AJ学IOS 之ipad开发Popover的基本使用
- AJ学IOS(19)UI之QQ好友列表
- AJ学IOS 之ipad开发Popover的调色板应用_popover显示后其他控件仍然能进行交互
- AJ学IOS 之CoreLocation基本使用
- AJ学IOS之安装cocoapods
- AJ学IOS 之微博项目实战(1)微博主框架-子控制器的添加
- AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController
- AJ学IOS 之微博项目实战(5)微博自定义搜索框searchBar
- AJ学IOS 之微博项目实战(7)程序启动新特性用UICollectionViewController实现
- AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
- AJ学IOS(18)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- IOS(iphone,ipad,itouch)开发 之 屏幕旋转
- AJ学IOS(44)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配
- iPad开发实现横竖屏幕调整View的尺寸
- ios-ipad横竖屏适配
- AJ学IOS 之BLOCK的妙用_利用block实现链式编程
- AJ学IOS 之tableView的下拉放大图片的方法
- AJ学IOS 之二维码学习,快速生成二维码
- AJ学IOS 之二维码学习,快速打开相机读取二维码
- nexus启动无法访问 添加RUN_AS_USER=root也不行
- AJ学IOS 之ipad开发qq空间项目横竖屏幕适配
- AJ学IOS 之ipad开发Popover的基本使用
- AJ学IOS 之ipad开发Popover的调色板应用_popover显示后其他控件仍然能进行交互
- 解决从服务器获取的数组是 __NSCFConstantString以及""没有空格字符串的问题
- 10008---XML 配置里的 Bean 自动装配
- AJ学IOS之去除服务器返回数据中的html标签,去除指定字符串,替换字符串
- AJ学IOS之安装cocoapods
- iOS9—xcode7常见错误https问题解决
- AJ学IOS 之第三方登录友盟实现