使用UIScreenEdgePanGestureRecognizer写iOS7侧边栏

使用UIScreenEdgePanGestureRecognizer写iOS7侧边栏

A UIScreenEdgePanGestureRecognizer looks for panning (dragging) gestures that start near an edge of the screen. The system uses screen edge gestures in some cases to initiate view controller transitions. You can use this class to replicate the same gesture behavior for your own actions.

UIScreenEdgePanGestureRecognizer看起来像pan手势,它是检测屏幕边缘的pan手势的。系统在某些controller转场的时候会使用这个手势。你也可以使用这个手势做其他的事情。

源码:

#import "RootViewController.h"

@interface RootViewController ()<UIGestureRecognizerDelegate>

{

    CGFloat  _centerX;
    CGFloat  _centerY;
    UIView  *_backgroundView;

}

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 存储坐标
    _centerX = self.view.bounds.size.width / 2;
    _centerY = self.view.bounds.size.height / 2;
    self.view.backgroundColor = [UIColor blackColor];

    // 屏幕边缘pan手势(优先级高于其他手势)
    UIScreenEdgePanGestureRecognizer *leftEdgeGesture = \
    [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self
                                                      action:@selector(handleLeftEdgeGesture:)];
    leftEdgeGesture.edges = UIRectEdgeLeft;           // 屏幕左侧边缘响应
    [self.view addGestureRecognizer:leftEdgeGesture]; // 给self.view添加上

    // 设置一个UIView用来替换self.view,self.view用来当做背景使用
    _backgroundView = [[UIView alloc] initWithFrame:self.view.bounds];
    _backgroundView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_backgroundView];

    // 展示的view
    UIView *showView_01 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
    showView_01.tag = 0x1;
    showView_01.backgroundColor = [UIColor redColor];
    [_backgroundView addSubview:showView_01];
}

- (void)handleLeftEdgeGesture:(UIScreenEdgePanGestureRecognizer *)gesture
{
    // 获取到当前被触摸的view
    UIView *view = [self.view hitTest:[gesture locationInView:gesture.view]
                            withEvent:nil];

    NSLog(@"tag = %ld", (long)view.tag);

    if(UIGestureRecognizerStateBegan == gesture.state ||
       UIGestureRecognizerStateChanged == gesture.state)
    {
        // 根据被触摸手势的view计算得出坐标值
        CGPoint translation = [gesture translationInView:gesture.view];
        NSLog(@"%@", NSStringFromCGPoint(translation));

        NSLog(@"进行中");

        // 进行设置
        _backgroundView.center = CGPointMake(_centerX + translation.x, _centerY);
    }
    else
    {
        // 恢复设置
        [UIView animateWithDuration:.3 animations:^{
            _backgroundView.center = CGPointMake(_centerX, _centerY);

        }];
    }
}

@end

RootViewController.m

处理手势:

效果如下图:

 

如果想与其他手势并发操作,实现如下代理即可:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

 

 

 

时间: 2024-10-01 09:23:30

使用UIScreenEdgePanGestureRecognizer写iOS7侧边栏的相关文章

使用TFHpple解析html

使用TFHpple解析html https://github.com/topfunky/hpple   前期准备工作 引入静态库文件 添加库文件的 header search paths(注意,必须选中 All) 将从github上下载的源码包拖入工程当中 准备工作结束   使用详情 我们来解析网址 http://www.cnblogs.com/YouXianMing/ 中的title标签哦. 思路是这样子的: 1. 将网页转换成NSData 2. 按照标签值在NSData中数据进行查询 3.

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.       下载:https://github.com/mwaterfall/MWPhotoBrowser   目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Gith

常用iOS的第三方框架

图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流

开源 iOS 项目分类索引大全

mattt大神的发布程序:https://github.com/nomad/shenzhen ----------------Mac完整项目----------电台:https://github.com/myoula/sostart ----------------iOS完整项目----------------1,豆瓣相册 https://github.com/TonnyTao/DoubanAlbum2,voa在线英语 https://github.com/cubewang/NewsReader

UIWindow,UINavigationController与UIViewController之间的关系

UIWindow,UINavigationController与UIViewController之间的关系 虽然每次你都用UINavigationController与UIWindow,但你不一定知道他们之间到底怎么运作的哦:) AppDelegate.h的代码 RootViewController.m // // RootViewController.m // UIWindow // // Copyright (c) 2014年 Y.X. All rights reserved. // #im

前端开发-新手求助,我写的js侧边栏上下滑动固定效果,为什么我的一直上下抖动

问题描述 新手求助,我写的js侧边栏上下滑动固定效果,为什么我的一直上下抖动 鼠标滚动得快的时候就出现问题,怎么解决啊? <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body{ height: 2500px; } #Div{ backgroun

代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关系.而随着iOS开发发展至今,可以说在UI制作上大家逐渐分化为了三种主要流派:使用代码手写UI及布局:使用单个xib文件组织viewController或者view:使用StoryBoard来通过单个或很少的几个(关于这点稍后会进行展开)文件构建全部UI.应该使用哪种方式来制作UI已经是iOS开发中

填充我的博客侧边栏——Word 2007高级应用

填充我的博客侧边栏--Word 2007高级应用 假设"我的博客"侧边栏的相关文件安置在My Blogs文件夹里,该文件夹的结构如下图所示: 图 1 虽然我们可以通过枚举My Blogs的子文件夹来填充cbxBlogs控件,然而我希望设计一个类来表示博客并且实现一定的数据绑定.回顾上一篇文章"创建我的博客侧边栏 --Word 2007高级应用(二)","我的博客"侧边栏应该具备如下特性: 它会在启动时读取My Blogs文件夹里的相关信息,并且填

JS+CSS实现侧边栏跟随浏览器滚动效果

看月光博客,卢松松博客,文章页的侧边栏都可以随着浏览器滚动而停留在页面,羡慕了吧.其实我们也可以用这种特效的呢.下面,就讲讲如何实现这个效果吧~这个是卢松松博客原创的,我稍稍介绍了一下而已哈! 一:这个效果有什么用 现在很多网站都有这种效果,比如月光博客,卢松松博客,当你一篇文章写的较长,而且评论较多的时候,这个功能就可以帮你提高浏览量,用户在你的博客里面的跳出率也会随之减少.如果你在这放个广告,效果会很不错! 二:如何实现这个功能 亲,采用JS+CSS就可以实现这个功能了 三:实现侧边栏跟随特