iOS swift3.0 抽屉式侧滑布局的实现
2016-09-02 23:30
686 查看
今天给大家讲解的这个东西呢,就是模仿手机QQ的侧滑抽屉式布局,如下图所示:
首先我们的实现思路是用两层叠在一起的UIView来实现,当点击表层view的左上角按钮,或者手指向右滑动时,表层view向右移动一段距离,然后漏出底层的view,向左滑动之后表层view再回到最初的位置,具体代码如下,详情请看注释:
//
// Created by 松洋 on 16/9/2.
// Copyright © 2016年 com.du. All rights reserved.
//
import UIKit
class ChouTiViewController:
UIViewController {
var swipeLeft :UISwipeGestureRecognizer!; //
左滑手势
var swipeRight :UISwipeGestureRecognizer!; //
右滑手势
@IBOutletweak
var bottomView:UIView! // 底层view
@IBOutletweak
var aboveView:UIView! // 表层view
var flag =0;
overridefunc viewDidLoad() {
super.viewDidLoad()
/*
* 下面这段代码将滑动事件注册到我们的表层的view中,就是只有对表层的view滑动,才会触发滑动效果
*/
swipeLeft =UISwipeGestureRecognizer(target:self, action:
#selector(ChouTiViewController.swipe(_:)))
swipeLeft.direction =UISwipeGestureRecognizerDirection.left
self.aboveView.addGestureRecognizer(swipeLeft)
swipeRight =UISwipeGestureRecognizer(target:self, action:
#selector(ChouTiViewController.swipe(_:)))
swipeRight.direction =UISwipeGestureRecognizerDirection.right
self.aboveView.addGestureRecognizer(swipeRight)
}
/*
* 注册的划定监听罪行的方法,
*/
func swipe(_ recognizer:UISwipeGestureRecognizer){
if recognizer.direction ==UISwipeGestureRecognizerDirection.left{
UIView.animate(withDuration:0.5, animations: {
if(self.flag%2
!= 0){
self.aboveView.center.x
= self.view.bounds.width/2;
self.flag+=1;
}
})
}elseif recognizer.direction
==UISwipeGestureRecognizerDirection.right{
UIView.animate(withDuration:0.5, animations: {
if(self.flag%2
== 0){
self.aboveView.center.x
= self.aboveView.center.x+self.view.bounds.width/1.5;
self.flag+=1;
}
})
}
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
/*
* 定义全局变量flag,每次通过flag,表层view来判断执行向左还是向右移动的动画,然后执行flag+1,这样保证我们点击左上角按钮 * 的时候,奇数情况下就是关闭抽屉,偶数情况则为打开抽屉
*/
@IBActionfunc openDraw(_ sender:AnyObject)
{
UIView.animate(withDuration:0.5, animations: {
if(self.flag%2
== 0){
self.aboveView.center.x
= self.aboveView.center.x+self.view.bounds.width/1.5;
}else{
self.aboveView.center.x
= self.view.bounds.width/2;
}
self.flag+=1;
})
}
}
给大家看看效果哈,只是简单的做了个布局:
首先我们的实现思路是用两层叠在一起的UIView来实现,当点击表层view的左上角按钮,或者手指向右滑动时,表层view向右移动一段距离,然后漏出底层的view,向左滑动之后表层view再回到最初的位置,具体代码如下,详情请看注释:
//
// Created by 松洋 on 16/9/2.
// Copyright © 2016年 com.du. All rights reserved.
//
import UIKit
class ChouTiViewController:
UIViewController {
var swipeLeft :UISwipeGestureRecognizer!; //
左滑手势
var swipeRight :UISwipeGestureRecognizer!; //
右滑手势
@IBOutletweak
var bottomView:UIView! // 底层view
@IBOutletweak
var aboveView:UIView! // 表层view
var flag =0;
overridefunc viewDidLoad() {
super.viewDidLoad()
/*
* 下面这段代码将滑动事件注册到我们的表层的view中,就是只有对表层的view滑动,才会触发滑动效果
*/
swipeLeft =UISwipeGestureRecognizer(target:self, action:
#selector(ChouTiViewController.swipe(_:)))
swipeLeft.direction =UISwipeGestureRecognizerDirection.left
self.aboveView.addGestureRecognizer(swipeLeft)
swipeRight =UISwipeGestureRecognizer(target:self, action:
#selector(ChouTiViewController.swipe(_:)))
swipeRight.direction =UISwipeGestureRecognizerDirection.right
self.aboveView.addGestureRecognizer(swipeRight)
}
/*
* 注册的划定监听罪行的方法,
*/
func swipe(_ recognizer:UISwipeGestureRecognizer){
if recognizer.direction ==UISwipeGestureRecognizerDirection.left{
UIView.animate(withDuration:0.5, animations: {
if(self.flag%2
!= 0){
self.aboveView.center.x
= self.view.bounds.width/2;
self.flag+=1;
}
})
}elseif recognizer.direction
==UISwipeGestureRecognizerDirection.right{
UIView.animate(withDuration:0.5, animations: {
if(self.flag%2
== 0){
self.aboveView.center.x
= self.aboveView.center.x+self.view.bounds.width/1.5;
self.flag+=1;
}
})
}
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
/*
* 定义全局变量flag,每次通过flag,表层view来判断执行向左还是向右移动的动画,然后执行flag+1,这样保证我们点击左上角按钮 * 的时候,奇数情况下就是关闭抽屉,偶数情况则为打开抽屉
*/
@IBActionfunc openDraw(_ sender:AnyObject)
{
UIView.animate(withDuration:0.5, animations: {
if(self.flag%2
== 0){
self.aboveView.center.x
= self.aboveView.center.x+self.view.bounds.width/1.5;
}else{
self.aboveView.center.x
= self.view.bounds.width/2;
}
self.flag+=1;
})
}
}
给大家看看效果哈,只是简单的做了个布局:
相关文章推荐
- iOS ScrollView实现自动布局的方法(适用Swift 3.0 )
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包,swift 3.0
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包,swift 3.0
- iOS Swift3.0实现视频播放横竖屏切换效果
- 论坛源码推荐(6月24日):用Swift实现的自动布局和翻转动画以及iOS iBeacon项目
- iOS - UICollectionView 自定义布局之风火轮[译] (原版为swift,我这里的实现改为OC)
- iOS ScrollView 下拉放大图片,上滑覆盖图片实现方法(Swift 3.0)
- IOS 使用自定义View实现圆形布局(Swift)
- iOS实现iCloud数据存储-Swift3.0
- 如何在IOS中使用实现Android view.gone 功能(swift版)cell(两种不同的布局)
- iOS项目开发实战——Swift实现多个TableView的侧滑与切换
- iOS学习笔记03——以编码的方式实现Auto Layout自动布局(二)
- IOS瀑布流 通过自定义UICollectionViewController的Layout布局实现
- 论坛源码推荐(6月27日):用Swift实现的游戏原型 iOS视图的Empty DataSet模式
- 论坛源码推荐(7月11日):用Swift实现的iOS通知控件 轻量级iOS 7条形码扫描库
- 论坛源码推荐(7月9日):用Swift实现的计时器 最简单的方式展示iOS App更新
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- 论坛源码推荐(8月14日):基于高德地图iOS SDK的轨迹回放库,用Swift实现的设计模式
- iOS: 学习笔记, 用代码驱动自动布局实例(swift)
- iOSLearningDiary以编码的方式实现Auto Layout自动布局