侧滑栏效果的实现

效果

源码

https://github.com/YouXianMing/iOS-Project-Examples 中的 SideViewController

//
//  ViewController.m
//  SideViewController
//
//  Created by YouXianMing on 16/6/6.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "LeftViewController.h"
#import "MainViewController.h"
#import "UIView+SetRect.h"

@interface ViewController () {

    CGFloat _screenWidth;
}

@property (nonatomic, strong) UIPanGestureRecognizer *panGesture;
@property (nonatomic)         CGPoint                 panBeginPoint;

@property (nonatomic, strong) LeftViewController     *leftViewController;
@property (nonatomic, strong) UIView                 *leftView;

@property (nonatomic, strong) MainViewController     *mainViewController;
@property (nonatomic, strong) UIView                 *mainView;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    // Init some value.
    _screenWidth = Width;

    // Add backgroundView.
    UIImageView *backgroundView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    backgroundView.image        = [UIImage imageNamed:@"back"];
    [self.view addSubview:backgroundView];

    // LeftViewController
    self.leftViewController = [[LeftViewController alloc] init];
    self.leftView           = self.leftViewController.view;
    [self.view addSubview:self.leftView];

    // MainViewController
    self.mainViewController = [[MainViewController alloc] init];
    self.mainView           = self.mainViewController.view;
    [self.view addSubview:self.mainView];

    // Pan gesture.
    self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureEvent:)];
    [self.mainView addGestureRecognizer:self.panGesture];
}

- (void)panGestureEvent:(UIPanGestureRecognizer *)gesture {

    CGPoint translation = [gesture translationInView:gesture.view];
    CGPoint velocity    = [gesture velocityInView:gesture.view];

    CGFloat gap               = _screenWidth / 3.f * 2;
    CGFloat sensitivePosition = _screenWidth / 2.f;

    if (velocity.x < 0 && _mainView.x <= 0) {

        // 过滤掉向左侧滑过头的情形
        _mainView.x = 0.f;

    } else {

        if (gesture.state == UIGestureRecognizerStateBegan) {

            // 开始
            _panBeginPoint = translation;

            if (_mainView.x >= sensitivePosition) {

                _panBeginPoint.x -= gap;
            }

        } else if (gesture.state == UIGestureRecognizerStateChanged) {

            // 值变化
            _mainView.x = translation.x - _panBeginPoint.x;

            if (_mainView.x <= 0) {

                // 过滤掉向左侧滑过头的情形
                _mainView.x = 0.f;
            }

        } else if (gesture.state == UIGestureRecognizerStateEnded) {

            // 结束
            [UIView animateWithDuration:0.20f animations:^{

                _mainView.x >= sensitivePosition ? (_mainView.x = gap) : (_mainView.x = 0);
            }];
        }
    }
}

@end

细节

时间: 2024-10-14 17:05:40

侧滑栏效果的实现的相关文章

页面侧滑栏效果

效果图:使用侧滑栏属性将两个页面组合起来,显示侧滑效果 首先:设置左边页面的布局: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_widt

android5.0多种侧滑栏效果

1.普通侧滑 效果图: 思路:通过自定义View继承HorizontalScrollView,然后重写onMeasure(),onLayout(),onTouchEvent() 方法并设置menu(通过动画使menu开始时处于隐藏状态)布局和content布局.(注意:使用ViewHelper类需要导入nineoldandroids-2.4.0.jar包) menu(left_menu)布局代码: <?xml version="1.0" encoding="utf-8&

【FastDev4Android框架开发】打造QQ6.X最新版本侧滑界面效果(三十八)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50253925 本文出自:[江清清的博客] (一).前言: 这两天QQ进行了重大更新(6.X)尤其在UI风格上面由之前的蓝色换成了白色居多了,侧滑效果也发生了一些变化,那我们今天来模仿实现一个QQ6.X版本的侧滑界面效果.今天我们还是采用神器ViewDragHelper来实现,之前我们以前基于ViewDragHelper的使用和打造QQ5.X效果了,基本使用方法可以点

【Android界面实现】使用ActionBar和DrawerLayout纯原生控件,实现侧滑栏和滑动Tab界面

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的文章中,我们使用第三方开源控件,比如说是SlidingMenu和PagerSlidingTabStrip,实现过侧滑栏和滑动Tab界面.但是在support-v4包中,提供了原生的侧滑栏控件DrawerLayout,而滑动的Tab效果,我们可以使用ViewPager和ActionBar上的Tab来进行实现.所以在今天的文章里面,我们将介绍如何将DrawerLayout与ActionBar进行整合,

ViewDragHelper详解(侧滑栏)

乐观是一首激昂优美的进行曲,时刻鼓舞着你向事业的大路勇猛前进.--大仲马 一.概述 Drag拖拽:ViewDrag拖拽视图,拖拽控件:ViewDragHelper拖拽视图助手,拖拽操作类.利用ViewDragHelper类可以实现很多绚丽的效果,比如:拖拽删除,拖拽排序,侧滑栏等.本篇主要讲解简易侧滑栏的实现. 注意:ViewDragHelper是作用在一个ViewGroup上,也就是说他不能直接作用到被拖拽的控件view上, 因为控件的位置是由父控件决定的. 最终效果效果图: 二.相关概念 1

使用slidingMenu实现简单的侧滑栏

首先要感谢各位国内外大神无私奉献的精神 最近APP需要做一个侧滑栏,查阅了一些资料后发现使用SlidingMenuS实现比较简单,这里做下笔记,方便以后有需要方便使用. (1)准备资源项目: 首先去https://github.com/jfeinstein10/SlidingMenu(SlidingMenu在GitHub的下载地址)下载资源项目.然后去 https://github.com/JakeWharton/ActionBarSherlock下载ActionBarSherlock资源项目,

Android第四期 - 单侧滑动效果

Android的设置或者登陆或者其他的一些主窗体要展示的功能需要用到sliding的效果,下面就叫大家怎么做.直接上代码!! MainActivity部分: package net.ting.sliding; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.

Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭【学习鸿洋_视频博客笔记总结】

学习鸿洋博客:http://blog.csdn.net/lmj623565791/article/details/39257409 学习鸿洋视频:慕课网视频 看看Android 高仿 QQ5.0 侧滑菜单效果 自定义控件实现效果: 技术上,继承HorizontalScrollView 加上自定义ViewGroup来实现: 1.onMeasure:决定内部View(子View)的宽和高,以及自己的宽和高 2.onLayout:决定子View的放置位置 3.onTouchEvent[监听动作] 自定

右侧扩展栏效果实现

扩展栏效果:关键逻辑:父:position:relative; display:none;  子:position:absolute; ①子元素样式.son{    padding:10px;    background-color:#003300;    color:#FFFFFF;    width:300px;    height:300px;    display:none;     position: absolute;    z-index:999;    //必须比父元素的要大