DJTabbarButton.m

#import "DJTabbarButton.h"

@implementation DJTabbarButton

- (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.backgroundColor = [UIColor greenColor];
}
return self;
} - (void)layoutSubviews { [super layoutSubviews]; if (DJLandscape) { // 横屏 /* imageView */
self.imageView.x = ;
self.imageView.y = ;
self.imageView.width = self.width * 0.4;
self.imageView.height = self.height; /* titleLabel */
self.titleLabel.hidden = NO;
self.titleLabel.x = self.imageView.width;
self.titleLabel.y = ;
self.titleLabel.width = self.width - self.imageView.width;
self.titleLabel.height = self.height; } else { // 竖屏 /* imageView */
self.imageView.frame = self.bounds;
/* titleLabel */
self.titleLabel.hidden = YES;
}
} /* 设置按钮无高亮状态 */
- (void)setHighlighted:(BOOL)highlighted { } @end

DJHomeViewController.m

// 添加子控制器
- (void)setupChildViewControllers { for (int i = ; i < ; i++) {
UIViewController *childVC = [[UIViewController alloc] init];
childVC.view.backgroundColor = DJRandomColor;
[self addChildViewController:childVC];
}
} - (void)replaceCurrentShowingController:(DJTabBarIndex)index { // 将当前显示的子控制器的View从界面上移除
[self.showingChildVc.view removeFromSuperview];
UIViewController *newShowingVc;
switch (index) {
case DJTabBarIndexAllStatus: // 全部动态
newShowingVc = self.childViewControllers[];
break;
case DJTabBarIndexWithMe: // 与我相关
newShowingVc = self.childViewControllers[];
break;
case DJTabBarIndexPhotoWall: // 照片樯
newShowingVc = self.childViewControllers[];
break;
case DJTabBarIndexPhotoFrame: // 电子相框
newShowingVc = self.childViewControllers[];
break;
case DJTabBarIndexFriend: // 好友
newShowingVc = self.childViewControllers[];
break;
case DJTabBarIndexMore: // 更多
newShowingVc = self.childViewControllers[];
break;
} newShowingVc.view.x = self.menuView.width;
newShowingVc.view.y = ;
newShowingVc.view.width = self.view.width - self.menuView.width;
newShowingVc.view.height = self.view.height;
[self.view addSubview:newShowingVc.view];
self.showingChildVc = newShowingVc; } - (void)updateSubViewFrameInLandscape { /* menuView */
self.menuView.width = DJMenuViewLW;
self.menuView.height = DJScreenLH;
self.menuView.x = ;
self.menuView.y = ; /* showingChildVc */
self.showingChildVc.view.x = self.menuView.width;
self.showingChildVc.view.y = ;
self.showingChildVc.view.width = DJScreenLW - self.menuView.width;
self.showingChildVc.view.height = DJScreenLH; } - (void)updateSubViewsViewFrameInPortrait { /* menuView */
self.menuView.width = DJMenuViewPW;
self.menuView.height = DJScrrenPH;
self.menuView.x = ;
self.menuView.y = ; /* showingChildVc */
self.showingChildVc.view.x = self.menuView.width;
self.showingChildVc.view.y = ;
self.showingChildVc.view.width = DJScreenPW - self.menuView.width;
self.showingChildVc.view.height = DJScrrenPH; }
// 当屏幕方向将会发生改变时调用此方法
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { // 横屏
[self updateSubViewFrameInLandscape];
} else { // 竖屏
[self updateSubViewsViewFrameInPortrait];
} // 设置当前子控制器的View不拉伸
self.showingChildVc.view.autoresizingMask = UIViewAutoresizingNone; }

最终效果:

QQ空间HD(6)-实现自定义的选项卡切换效果的更多相关文章

  1. 仿网易/QQ空间视频列表滚动连播炫酷效果

    代码地址如下:http://www.demodashi.com/demo/11201.html 一.准备工作 AndroidStudio 开发环境 需要下载七牛的开源播放器SDK 本例子实现了仿网易/ ...

  2. 使用ViewPager+Fragment实现选项卡切换效果

    实现效果 本实例主要实现用ViewPage和Fragment实现选项卡切换效果,选项卡个数为3个,点击选项卡或滑动屏幕会切换Fragment并实现选项卡下方下边框条跟随移动效果. 本程序用androi ...

  3. 使用jquery实现选项卡切换效果

    几张简陋的框架效果图 页面加载时: 选项卡操作后: css样式: <style type="text/css"> *{margin:0px;padding:0px;} ...

  4. 用html+css+js实现选项卡切换效果

    文章转载自:http://tongling.github.io/JSCards/ 用html+css+js实现选项卡切换效果 使用之前学过的综合知识,实现一个新闻门户网站上的常见选项卡效果: 文字素材 ...

  5. [前端] html+css+javascript 实现选项卡切换效果

    用html+css+js实现选项卡切换效果使用之前学过的综合知识,实现一个新闻门户网站上的常见选项卡效果: 文字素材:房产: 275万购昌平邻铁三居 总价20万买一居 200万内购五环三居 140万安 ...

  6. JS实现选项卡切换效果

    1.在网页制作过程中,我们经常会用到选项卡切换效果,它能够让我们的网页在交互和布局上都能得到提升 原理:在布局好选项卡的HTML结构后,我们可以看的出来,选项卡实际上是三个选项卡标头和三个对应的版块, ...

  7. 纯js实现网页tab选项卡切换效果

    纯js实现网页tab选项卡切换效果 百度搜索     js 点击菜单项就可以切换内容的效果

  8. vue实现tab选项卡切换效果

    tab选项卡切换效果: 通过点击事件传入参数,然后通过v-show来进行切换显示 <template> <div class="box"> <div ...

  9. vue实现选项卡切换效果

    效果如下: 说明: 这里我使用的原理是利用vue中的v-show/显示隐藏指令,当为true的时候显示,为false的时候隐藏 1html代码: <head> <meta chars ...

随机推荐

  1. Linux下通配符总结

    * - 通配符,代表任意字符(0到多个)? - 通配符,代表一个字符# - 注释/ - 跳转符号,将特殊字符或通配符还原成一般符号| - 分隔两个管线命令的界定; - 连续性命令的界定~ - 用户的根 ...

  2. openstack云5天资料

    在网上看到有个人的博客,写了个openstack云5天学习资料.对于英文不怎么好的童鞋来说,感觉还可以.可以对openstack有所了解和认识,对后续openstack更加深入的学习有很大的帮组.   ...

  3. Azure HDInsight 和 Spark 大数据实战(一)

    What is HDInsight? Microsoft Azure HDInsight 是基于 Hortonoworks Data Platform (HDP) 的 Hadoop 集群,包括Stor ...

  4. Struts2 easy UI插件

    一.easy UI是类似于jQuery UI的插件库,它提供了丰富的各种常用插件:tree.datagrid... tree插件: 语法:$(selector).tree([settings]); 常 ...

  5. 解析ThreadLocal

    如果定义了一个单实例的java bean,它有若干属性,但是有一个属性不是线程安全的,比如说HashMap.并且碰巧你并不需要在不同的线程中共享这个属性,也就是说这个属性不存在跨线程的意义.那么不推荐 ...

  6. python yield from用法

    Reading data from a generator using yield from def reader(): """A generator that fake ...

  7. 以libfuse为例介绍rpm打包工具rpmbuild的使用和SPEC文件的编写

    一.rpmbuild命令的安装 yum install rpm-build 二.用法 rpmbuild -bb XXXX.spec或者rpmbuild -ba XXX.tar.gz 三.目录概述 rp ...

  8. request.getcontextPath() 详解

    request.getcontextPath() 详解 文章分类:Java编程 <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径. 但 ...

  9. 获取使用ClickOnce部署的应用程序的版本号

    引子 在编写使用ClickOnce部署的应用程序时,需要在程序的标题栏.软件变更记录.软件关于等页面读取显示当前的版本号. 之前很傻瓜的做法就是在Resource中维护一个string值,在使用到的地 ...

  10. IoC模式(依赖、依赖倒置、依赖注入、控制反转)

    1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...