使用RNSwipeViewController类库进行视图切换

简介:

       如今很多应用已经不再局限于点击按钮触发事件来进行视图之间切换,为迎合给予用户更好体验,体现iOS系统极佳用户体验,使用手势来进行各个视图之间切换,用户至于一个大拇指在屏幕中央就可浏览到很多信息;

关于 RNSwipeViewController: https://github.com/rnystrom/RNSwipeViewController

RNSwipeViewController是别人已经写好的一个ViewController容器,剩下我们要做的就是把自己的视图容器放到这个容器中进行管理。


首先学习 RNSwipeViewController里面的Demo

1.创建一个Single View Application工程,next,勾选 Use Storyboards,Use Automatic  Reference Counting

2.将RNSwipeViewController拖入新建到工程,添加QuartzCore.framework

3.新建四个类CenterViewController、LeftViewController、RightViewController、BottomViewController,继承UIViewController类

4.打开StoryBoard,从库里拖入四个ViewController视图控制器到StoryBoard里面,选中一个视图控制器设置类名和Storyboard ID,其他三个类似


5.在ViewController.h将加入#import "RNSwipeViewController.h"并将继承类改为RNSwipeViewController,在ViewDidLoad方法中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- ( void )viewDidLoad
{
     [super viewDidLoad];
     CenterViewController *centerView = [self.storyboard instantiateViewControllerWithIdentifier:@ "CenterViewController" ];
     UINavigationController *centerNav = [[UINavigationController alloc] initWithRootViewController:centerView];
     centerView.title  =@ "Center" ;
     self.centerViewController = centerNav;
     self.leftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@ "LeftViewController" ];
                                                                                                          
     self.rightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@ "RightViewController" ];
                                                                                                            
     self.bottomViewController = [self.storyboard instantiateViewControllerWithIdentifier:@ "BottomViewController" ];
                                                                                                             
}

如此我们就完成三个视图之间手势交互,首先出现的视图作为主视图,其他试图再是在它上面进行运动,手指向左滑右侧视图出现,向右滑动出现左视图,向上滑动出现底部视图出现

..

平常我们在构建一个带有XIB视图控制类的时候,初始化一般这样

CenterViewController *centerVC = [[CenterViewController alloc] initWithNibName:@"CenterViewController" bundle:nil];

但是在StoryBoard中,视图的Storyboard ID  成了这是视图的唯一标示,再给一个视图所属类时,设定好该视图的Storyboard ID,进行初始化时CenterViewController *centerView = [self.storyboard instantiateViewControllerWithIdentifier:@"CenterViewController"];


这个类库中也提供按钮点击进行视图交互方法,同时也设置视图显示宽度的属性,在类库实现的里面视图宽度有默认值

_leftVisibleWidth = 200.f;
_rightVisibleWidth = 200.f;
_bottomVisibleHeight = 300.0f;

再此我们可以在自己类里修改这个属性,根据自己需求,作图下设置

ViewController.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- ( void )viewDidLoad
{
     [super viewDidLoad];
                                                                                                 
                                                                                                 
     CenterViewController *centerView = [self.storyboard instantiateViewControllerWithIdentifier:@ "CenterViewController" ];
     UINavigationController *centerNav = [[UINavigationController alloc] initWithRootViewController:centerView];
     centerView.title  =@ "Center" ;
     self.centerViewController = centerNav;
     self.leftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@ "LeftViewController" ];
     self.leftVisibleWidth = 100;
     self.rightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@ "RightViewController" ];
     self.rightVisibleWidth  = self.view.frame.size.width;
     self.bottomViewController = [self.storyboard instantiateViewControllerWithIdentifier:@ "BottomViewController" ];
                                                                                                 
}


我们再给导航栏上添加两个按钮,在CenterViewController类中,包含#import "UIViewController+RNSwipeViewController.h"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- ( void )viewDidLoad
{
     [super viewDidLoad];
                                                                                         
     UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
     leftBtn.frame = CGRectMake(0, 0, 44, 44);
     [leftBtn setImage:[UIImage imageNamed:@ "left.png" ] forState:UIControlStateNormal];
     [leftBtn addTarget:self action:@selector(toggleLeft) forControlEvents:UIControlEventTouchUpInside];
     UIBarButtonItem *leftBar = [[UIBarButtonItem alloc] initWithCustomView:leftBtn];
     self.navigationItem.leftBarButtonItem = leftBar
     ;
                                                                                         
                                                                                         
     UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];
     rightBtn.frame = CGRectMake(self.view.frame.size.width-44, 0,44 , 44);
     [rightBtn setImage:[UIImage imageNamed:@ "right.png" ] forState:UIControlStateNormal];
     [rightBtn addTarget:self action:@selector(toggleRight) forControlEvents:UIControlEventTouchUpInside];
     UIBarButtonItem *rightBar = [[UIBarButtonItem alloc] initWithCustomView:rightBtn];
     self.navigationItem.rightBarButtonItem = rightBar;
     ;
                                                                                          
}


接着连个按钮事件,为了显示明显我们可以设置一下三个视图背景颜色

1
2
3
4
5
6
7
8
-( void )toggleLeft
{
     [self.swipeController showLeft];
}
-( void )toggleRight
{
     [self.swipeController showRight];
}




RNSwipeViewController有一个协议方法,可以监听当前视图显示百分比(0~100)

RNSwipeViewController have a protocol method, can monitor the current view shows percentage (0 ~ 100)

1
2
3
4
#import <UIKit/UIKit.h>
#import "RNRevealViewControllerProtocol.h"
@interface LeftViewController : UIViewController<RNRevealViewControllerProtocol>
@end

协议方法,当左侧视图完全显示时弹出一个alertView

1
2
3
4
5
6
7
8
9
-( void )changedPercentReveal:(NSInteger)percent
{
     if  (percent == 100) {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@ "提示"  message:@ "这是一个测试"  delegate:self cancelButtonTitle:@ "OK"  otherButtonTitles: nil];
         [alert show ];
                                                                 
                                                                
     }
}


源码下载地址:https://github.com/XFZLDXF/XFSwipeView.git




     本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1279125,如需转载请自行联系原作者




相关文章
|
4月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
67 3
|
5月前
|
Android开发 UED 开发者
安卓开发中的自定义控件基础
【8月更文挑战第31天】在安卓应用开发过程中,自定义控件是提升用户界面和用户体验的重要手段。本文将通过一个简易的自定义按钮控件示例,介绍如何在安卓中创建和使用自定义控件,包括控件的绘制、事件处理以及与布局的集成。文章旨在帮助初学者理解自定义控件的基本概念,并能够动手实践,为进一步探索安卓UI开发打下坚实的基础。
|
编译器 C# Windows
C# 编写 WinForm 窗体应用程序(第一期)
WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程。
C# 编写 WinForm 窗体应用程序(第一期)
|
C# 数据安全/隐私保护 Windows
C#编写WinForm 窗体应用程序(第二期)
消息框在 Windows 操作系统经常用到,例如在将某个文件或文件夹移动到回收站中时系统会自动弹出如下图所示的消息框。
C#编写WinForm 窗体应用程序(第二期)
|
前端开发 JavaScript IDE
封装库/工具库中重要概念之编辑器
在前端开发中,编辑器(Code Editor)是一项非常重要的工具,它可以帮助我们更加高效地编写和编辑代码。虽然市面上已经有了许多强大的编辑器,但是使用封装库/工具库可以帮助我们更加方便地集成编辑器到我们的项目中
133 0
|
C# 数据安全/隐私保护
C# 编写 WinForm 窗体应用程序(第三期)
文本框 (TextBox) 是在窗体中输入信息时最常用的控件,通过设置文本框属性可以实现多行文本框、密码框等。
C# 编写 WinForm 窗体应用程序(第三期)
C#编写WinForm窗体应用程序(第四期)
在 C# 语言中 RadioButton 是单选按钮控件,多个 RadioButton 控件可以为一组,这一组内的 RadioButton 控件只能有一个被选中。
C#编写WinForm窗体应用程序(第四期)
|
Java 容器
Java开发GUI之CardLayout卡片布局
Java开发GUI之CardLayout卡片布局
219 0
|
C# Android开发
C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码
原文:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.
1011 0
|
JavaScript 前端开发 C++
COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章《A Complete ActiveX Web Control Tutorial》修改而来,因此同样遵循Code Project Open License (CPOL)。
876 0