iOS开发之多视图滑动点击切换实现

下面这个视图(多视图滑动点击切换)在很多App都有用到.使用封装过的view,外部调用一个API就可以实现,十分的方便。

git代码:https://github.com/HelloYeah/HYTabbarView.

//添加一个子控制器
 

 代码如下 复制代码
-(void)addSubItemWithViewController:(UIViewController *)viewController;

 
1.外部传一个控制器

 代码如下 复制代码
-(void)addSubItemWithViewController:(UIViewController *)viewController{
 
 
UIButton*btn=[UIButtonbuttonWithType:UIButtonTypeCustom];
 
[self.tabbar addSubview:btn];
[self setupBtn:btnwithTitle:viewController.title];
 
[btn addTarget:self action:@selector(itemSelected:)forControlEvents:UIControlEventTouchUpInside];
 
[self.subViewControllers addObject:viewController];
}

 
2.KVO监听当前选中View的序号值

 代码如下 复制代码

NSInteger  min = HYColumn  / 2 ;
if (_selectedIndex = self.titles.count - min) {
    UIButton * tempBtn = self.titles[self.titles.count - min - 1];
    CGFloat btnX = (HYColumn % 2 ) ? tempBtn.center.x : (tempBtn.center.x + btn.frame.size.width * 0.5) ;
    CGFloat offsetX = _tabbar.center.x - btnX;
    [UIView animateWithDuration:0.25 animations:^{
      _tabbar.contentOffset = CGPointMake(- offsetX, 0);
    }];    
}else if (_selectedIndex > min && _selectedIndex < self.titles.count - min && self.titles.count > HYColumn ) {
       CGFloat btnX  = (HYColumn % 2 ) ? btn.center.x : (btn.center.x - btn.frame.size.width * 0.5) ;
       CGFloat offsetX = _tabbar.center.x - btnX;
       [UIView animateWithDuration:0.25 animations:^{
         _tabbar.contentOffset = CGPointMake( - offsetX, 0);
           }];
    } else {
       [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }

时间: 2024-09-29 15:08:01

iOS开发之多视图滑动点击切换实现的相关文章

浅析iOS多视图滑动点击切换的集成_IOS

前言 多视图滑动点击切换这个视图在很多App都有用到,我对这个View进行了封装,外界只需要调用一个接口,就能实现这个效果,使用方法和系统的tabbarController很相似. 外界只需要调用下面这个接口即可集成. /** * 添加一个子控制器 */ - (void)addSubItemWithViewController:(UIViewController *)viewController; HYTabbarView效果图如下 HYTabbarView可灵活配置一屏宽显示多少个标题,以及标

比较IOS开发中常用视图的四种切换方式_IOS

在iOS开发中,比较常用的切换视图的方式主要有以下几种: 1. push.pop 使用举例(ViewController假设为需要跳转的控制器): [self.navigationController pushViewController:ViewController animated:YES]; //入栈,跳转到指定控制器视图 [self.navigationController popViewControllerAnimated:YES]; //弹栈,返回到前一个视图 [self.navig

iOS开发之表视图详解_IOS

本文详细介绍了表视图的用法.具体如下: 概述 表视图组成 表视图是iOS开发中最重要的视图,它以列表的形式展示数据.表视图又一下部分组成: 表头视图:表视图最上边的视图 表脚视图:表视图最下边的视图 单元格(cell):表视图中每一行的视图 节(section):由多个单元格组成,应用于分组列表 节头 节脚 表视图的相关类 UITableView继承自UIScrollView,且有两个协议:UITableViewDelegate和UITableViewDataSource.此外UITableVi

ios开发在表视图显示cell里的内容时出现failed to obtain a cell from its datasource

问题描述 ios开发在表视图显示cell里的内容时出现failed to obtain a cell from its datasource 这是代码 -(NSInteger)tableView:(UITableView )tableView numberOfRowsInSection:(NSInteger)section{ return 1; } -(UITableViewCell)tableView:(UITableView )tableView cellForRowAtIndexPath:

iOS开发之表视图爱上CoreData

在接触到CoreData时,感觉就是苹果封装的一个ORM.CoreData负责在Model的实体和sqllite建立关联,数据模型的实体类就相当于Java中的JavaBean, 而CoreData的功能和JavaEE中的Hibernate的功能类似,最基本是两者都有通过对实体的操作来实现对数据库的CURD操作.CoreData中的上下文(managedObjectContext)就相当于Hibernate中的session对象, CoreData中的save操作就和Hibernate中的comm

ios开发-xcode中怎么做到点击按钮从当前页面转入一个新的页面?

问题描述 xcode中怎么做到点击按钮从当前页面转入一个新的页面? 我是个初学者,只有简单的了解MVC和一些简单的api,我想知道我做一个登录界面,怎么让我点击登录之后进入下一个应用界面呢?大牛给详细的解答好吗,谢谢大神. 解决方案 从A页面跳到B页面 1.ViewControllerB *B=[[ViewControllerB alloc] init]; [self.navigationController pushViewController: B animated:true]; 2.Vie

举例讲解iOS开发中拖动视图的实现_IOS

预备知识iOS处理屏幕上的触摸动作,主要涉及到以下几个方法: 复制代码 代码如下: touchesBegan:withEvent:          //触摸屏幕的最开始被调用 touchesMoved:withEvent:         //移动过程中被调用 touchesEnded:withEvent:         //动作结束时被调用 touchesCancelled:WithEvent: 从方法的命名可以清晰的看出该方法何时被调用,最后一个比较特殊.touchesCancelled

iOS开发之手动布局子视图_IOS

手动布局子视图: 下面先看下效果图,我们今天要实现的效果: 这里我们默认用storyboard启动: 首先我们要在白色的屏幕上面创建一个父视图SuperView(蓝色的背景),在父视图里面创建四个小视图(橘黄色的背景) 下面看代码, 在SuperView.h文件里面: #import <UIKit/UIKit.h> @interface SuperView : UIView{ UIView * _view01; UIView * _view02; UIView * _view03; UIVie

iOS开发之SQLite--C语言接口规范(五)——iOS开发使用SQLite实例

本篇博客就使用前面操作SQLite的知识来实现如何去插入,删除和更新数据.然后再把操作SQlite数据库常用的方法进行一个封装.把常用方法进行封装后,把Cars数据库中的其中一个表的数据进行查询,并在UITableView上进行展示.因为本实例要对数据库的数据进行modify(修改)操作 ,在iOS系统上呢,为了安全起见,在Bundle中的数据库资源是不允许进行数据的插入修改和删除操作的.在之前的博客中我们只进行了查询操作,所以从Bundle加载数据库资源文件是可行的. 如果对数据库进程inse