iOS实现简易抽屉效果、双边抽屉效果

本文实例为大家分享了iOS实现抽屉效果的全部代码,供大家参考,具体内容如下

iOS实现简易抽屉效果,代码:

@interface ViewController () {
 UIView* _leftView;
}

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.

 _leftView = [[UIView alloc] init];
 //把左侧边的view先隐藏
 _leftView.frame = CGRectMake(-200, 0, 200, self.view.frame.size.height);
 _leftView.backgroundColor = [UIColor greenColor];
 [self.view addSubview:_leftView];

 UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
 [self.view addGestureRecognizer:pan];
}

- (void)handlePan:(UIPanGestureRecognizer*) recognizer {
 CGPoint translation = [recognizer translationInView:self.view];
 //增量后的x坐标位置
 CGFloat Xresult = translation.x + _leftView.frame.origin.x;

 //向右
 if (translation.x >= 0) {
  //leftView已全部拉出,则无法再向右
  if (_leftView.frame.origin.x >= 0 || Xresult >= 0) {
   _leftView.frame = CGRectMake(0, 0, 200, self.view.frame.size.height);

   return;
  }
 } else if (translation.x < 0) {//向左
  //leftView已全部收回,则无法再向左
  if (_leftView.frame.origin.x <= -200 || Xresult <= -200) {
   _leftView.frame = CGRectMake(-200, 0, 200, self.view.frame.size.height);
   return;
  }
 }

 CGRect frame = _leftView.frame;
 frame.origin.x += translation.x;
 _leftView.frame = frame;

 //清空移动的距离,这是关键
 [recognizer setTranslation:CGPointZero inView:recognizer.view];

 //做弹回效果,以中轴为界限
 if (recognizer.state == UIGestureRecognizerStateEnded) {
  if (_leftView.frame.origin.x > -100) {
   [self closeView:NO];
  } else {
   [self closeView:YES];
  }
 }
}

- (void)closeView:(BOOL)close {
 if (close) {
  [self moveView:CGRectMake(-200, 0, 200, self.view.frame.size.height)];
 } else {
  [self moveView:CGRectMake(0, 0, 200, self.view.frame.size.height)];
 }
}

- (void)moveView:(CGRect)frame {
 [UIView animateWithDuration:0.3 animations:^{
  _leftView.frame = frame;
 } completion:^(BOOL finished) {

 }];
}

iOS实现双边抽屉效果,代码:

#import "PathView.h"
#import "UIView+Additions.h"

@implementation PathView

- (instancetype)init {
 self = [super init];
 if (self) {
  [self setupGestureRecognizer];
 }
 return self;
}

- (void)setupGestureRecognizer {
 UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
 [self addGestureRecognizer:pan];
}

- (void)handlePan:(UIPanGestureRecognizer*)recognizer {
 CGPoint translation = [recognizer translationInView:self];

 CGFloat Xresult = translation.x + self.left;

 if (translation.x >= 0) {//向右
  if (self.left >= _leftWidth || Xresult >= _leftWidth) {
   self.frame = CGRectMake(_leftWidth, 0, self.width, self.height);
   return;
  }
 }
 else if (translation.x < 0) {//向左
  if (self.left <= -_rightWidth || Xresult <= -_rightWidth) {
   self.frame = CGRectMake(-_rightWidth, 0, self.width, self.height);
   return;
  }
 }

 self.left += translation.x;

 if (recognizer.state == UIGestureRecognizerStateEnded) {
  if (self.left > _leftWidth / 2) {
   [self openLeft:YES openRight:NO];
  }

  else if (self.left < -(_rightWidth / 2)) {
   [self openLeft:NO openRight:YES];
  }

  else {
   [self openLeft:NO openRight:NO];
  }
 }

 //清空移动的距离
 [recognizer setTranslation:CGPointZero inView:recognizer.view];
}

- (void)openLeft:(BOOL)left openRight:(BOOL)right {
 if (!left && !right) {
  [self moveView:CGRectMake(0, 0, self.width, self.height)];

 } else if (!left && right) {
  [self moveView:CGRectMake(-_rightWidth, 0, self.width, self.height)];

 } else if (left && !right) {
  [self moveView:CGRectMake(_leftWidth, 0, self.width, self.height)];

 }
}

- (void)moveView:(CGRect)frame {
 [UIView animateWithDuration:0.3 animations:^{
  self.frame = frame;
 } completion:^(BOOL finished) {

 }];
}

上面是实现的具体内容,所以不做多少注释,只不过把手势移到view里面,让view自己改变自己的frame;再有就是添加了两个属性,来指定左右两边各自抽屉抽出的宽度,某一边不需要,只要设置为0就好了。

以上就是本文的全部内容,希望能够帮助大家顺利实现iOS抽屉效果。

时间: 2016-02-26

ios仿侧边抽屉效果实现代码

效果图如下 代码实现以及思路下面分析: 代码创建导航控制器 Appdelegate.m中 #import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(

Android控件之SlidingDrawer(滑动式抽屉)详解与实例分享

SlidingDrawer效果想必大家也见到过,它就是1.5模拟器上进入应用程序列表的效果.下面是截图 一.简介  SlidingDrawer隐藏屏外的内容,并允许用户通过handle以显示隐藏内容.它可以垂直或水平滑动,它有俩个View组成,其一 是可以拖动的handle,其二是隐藏内容的View.它里面的控件必须设置布局,在布局文件中必须指定handle和content.例如下面 复制代码 代码如下: <SlidingDrawer android:layout_width="fill_

iOS实现左右拖动抽屉效果

本文实例介绍了iOS实现左右拖动抽屉效果,具体内容如下 利用了触摸事件滑动 touchesMoved: 来触发左右视图的出现和消失 利用loadView方法中添加view 在self.view载入前就把 左右中View都设置好frame 每一个方法都由单独的功能. #import "DarwViewController.h" @interface DarwViewController () @property (nonatomic, weak) UIView *leftView; @p

iOS实现侧拉栏抽屉效果

本文实例介绍了iOS实现侧拉栏抽屉效果的相关代码,分享给大家供大家参考,具体内容如下 需要导入第三方的类库如下: 抽屉效果所需第三方类库下载 效果:既可以两侧都实现抽屉效果也可只实现左侧栏或者右侧栏的抽屉效果 关于抽屉效果主要是AppDelegate的代码 AppDelegate.h文件代码: <span style="font-size:18px;"><span style="font-size:18px;">#import <UIK

iOS实现简单的抽屉效果

说到抽屉效果在iOS中比较有名的第三方类库就是PPRevealSideViewController.一说到第三方类库就自然而然的想到我们的CocoaPods,本文用CocoaPods引入PPRevealSideViewController,然后在我们的工程中以代码结合storyboard来做出抽屉效果. 一.在工程中用CocoaPods引入第三方插件PPRevealSideViewController. (1).在终端中搜索PPRevealSideViewController的版本 (2).在P

iOS如何用100行代码实现简单的抽屉效果

前言 iOS中抽屉效果的简单实现现在很多应用中都使用到了,网上也有很多了例子,本文主要是通过简单的一些代码来实现的,有需要的可以一起学习学习. 下面是效果图 示例代码如下 #import <UIKit/UIKit.h> @interface MainViewController : UIViewController + (instancetype)mainViewControllerWithLeftViewController:(UIViewController *)leftViewContr

iOS动画之向右拉的抽屉3D效果

首先我们忽略掉3D效果,先要做的是一个右拉的抽屉效果. 总体思路: 1.创建一个ContainerViewController容器控制器,然后把左侧选择菜单的SideMenuViewController,和右侧负责显示内容的MainViewController 添加到ContainerViewController中. 2.给容器控制器ContainerViewController添加一个手势监听,通过修改偏移量完成抽屉效果. 3.设置anchorPoint,给左侧SideMenuViewCont

iOS抽屉效果开发案例分享

本文实例为大家分享了iOS抽屉效果开发实例,供大家参考,具体内容如下 在显示在窗口的控制器上添加三个view(如果只需要往一边滑动就只加2个view) 先声明三个view #import "ViewController.h" @interface ViewController () @property(nonatomic, weak) UIView *mainV; @property(nonatomic, weak) UIView *leftV; @property(nonatomic

IOS实现点击滑动抽屉效果

最近,看到好多Android上的抽屉效果,也忍不住想要自己写一个.在Android里面可以用SlidingDrawer,很方便的实现.IOS上面就只有自己写了.其实原理很简单就是 UIView 的移动,和一些手势的操作. 效果图: // // DrawerView.h // DrawerDemo // // Created by Zhouhaifeng on 12-3-27. // Copyright (c) 2012年 CJLU. All rights reserved. // #import

iOS开发之路--仿网易抽屉效果

最终效果图: MainStoryBoard示意图: BeyondViewController.h // // BeyondViewController.h // 19_抽屉效果_仿网易 // // Created by beyond on 14-8-1. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> #import "LeftTableViewControllerD

IOS开发之路--C语言基础知识

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

Android自定义控件仿QQ抽屉效果

其实网上类似的实现已经很多了,原理也并不难,只是网上各种demo运行下来,多少都有一些问题.折腾了半天,决定自己实现一个. 首先我们看看实现效果: 对比网上各类demo,这次要实现的主要表现在以下几点: 1.侧滑显示抽屉view 2.侧滑抽屉隐藏view控件点击事件 3.单击任意item隐藏显示的抽屉view 4.滑动list隐藏显示的抽屉view 5.增加SwipeLayout点击事件和Swipe touch事件判断处理 6.优化快速划开多个抽屉隐藏view时多个SwipeLayout滑动状态

IOS代码笔记之仿电子书书架效果

本文实例为大家分享了IOS书架效果的具体实现代码,供大家参考,具体内容如下 一.效果图   二.工程图  三.代码 RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UITableViewDataSource,UITableViewDelegate> { NSMutableArray * dataArray; UITableView * myT

IOS开发之路--C语言存储方式和作用域

概述 基本上每种语言都要讨论这个话题,C语言也不例外,因为只有你完全了解每个变量或函数存储方式.作用范围和销毁时间才可能正确的使用这门语言.今天将着重介绍C语言中变量作用范围.存储方式.生命周期.作用域和可访问性. 变量作用范围 存储方式 可访问性 变量作用范围 在C语言中变量从作用范围包括全局变量和局部变量.全局变量在定义之后所有的函数中均可以使用,只要前面的代码修改了,那么后面的代码中再使用就是修改后的值:局部变量的作用范围一般在一个函数内部(通常在一对大括号{}内),外面的程序无法访问它,

IOS开发UIButton(左边图片右边文字效果)

在使用UIButton的时候,需要实现UIButton左边图片,图片后面紧跟文字效果比较麻烦,简单实现方法具体代码如下: (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = RGB(235, 235, 240); UIButton *oneButton = [[UIButton alloc] initWithFrame:CGRectMake(0, kHeaderHeight + 8, kScreenWidth,

iOS开发之路--微博“更多”页面

最终效果图: MoreViewController.m // // MoreViewController.m // 20_帅哥no微博 // // Created by beyond on 14-8-4. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "MoreViewController.h" @interface MoreViewController () { // more.plist根是字典

iOS开发之路--微博新特性页面

BeyondAppDelegate.m // // BeyondAppDelegate.m // 20_帅哥no微博 // // Created by beyond on 14-8-3. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "BeyondAppDelegate.h" #import "BeyondViewController.h" #import "NewFe

iOS开发之路--微博骨架搭建

最终效果图: BeyondViewController.m // // BeyondViewController.m // 20_帅哥no微博 // // Created by beyond on 14-8-3. // Copyright (c) 2014年 com.beyond. All rights reserved. // 这个就是主控制器,分为两块,下面是Dock栏,上面是显示不同的子控制器的view,子控制器最好用导航控制器包装一下,这样子控制器就自带了导航条,左按钮,标题,右按钮 /