zoukankan      html  css  js  c++  java
  • 使用pan手势实现抽屉效果

    #import "ViewController.h"

    @interface ViewController ()

    @property (nonatomic, weak) UIView *mainV;

    @property (nonatomic, weak) UIView *leftV;

    @property (nonatomic, weak) UIView *rightV;

    @end

    @implementation ViewController

    - (void)viewDidLoad {

    [super viewDidLoad];

    // 添加子控件

    [self setUpChildView];

    // 添加Pan手势

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];

    [self.view addGestureRecognizer:pan];

    // 利用KVO时刻监听mainV的frame属性

    // Observer:观察者 谁想监听

    // KeyPath:监听的属性

    // options:监听新值的改变

    [_mainV addObserver:self forKeyPath:keyPath(_mainV, frame) options:NSKeyValueObservingOptionNew context:nil];

    }

    // 只要监听的属性一改变,就会调用观察者的这个方法,通知你有新值

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

    {

    NSLog(@"%@",NSStringFromCGRect(_mainV.frame));

    if (_mainV.frame.origin.x > 0) { // 往右边移动,隐藏蓝色的view

    _rightV.hidden = YES;

    }else if (_mainV.frame.origin.x < 0){ // 往左边移动,显示蓝色的view

    _rightV.hidden = NO;

    }

    }

    // 在对象销毁的时候,一定要注意移除观察者

    - (void)dealloc

    {

    // 移除观察者

    [_mainV removeObserver:self forKeyPath:@"frame"];

    }

    #pragma mark - pan的方法

    - (void)pan:(UIPanGestureRecognizer *)pan

    {

    // 获取手势的移动的位置

    CGPoint transP = [pan translationInView:self.view];

    // 获取X轴的偏移量

    CGFloat offsetX = transP.x;

    // 修改mainV的Frame

    _mainV.frame = [self frameWithOffsetX:offsetX];

    // 复位

    [pan setTranslation:CGPointZero inView:self.view];

    }

    #pragma mark - 根据offsetX计算mainV的Frame

    - (CGRect)frameWithOffsetX:(CGFloat)offsetX

    {

    CGRect frame = _mainV.frame;

    frame.origin.x += offsetX;

    return frame;

    }

    #pragma mark - 添加子控件

    - (void)setUpChildView

    {

    // left

    UIView *leftV = [[UIView alloc] initWithFrame:self.view.bounds];

    leftV.backgroundColor = [UIColor greenColor];

    [self.view addSubview:leftV];

    _leftV = leftV;

    // right

    UIView *rightV = [[UIView alloc] initWithFrame:self.view.bounds];

    rightV.backgroundColor = [UIColor blueColor];

    [self.view addSubview:rightV];

    _rightV = rightV;

    // main

    UIView *mainV = [[UIView alloc] initWithFrame:self.view.bounds];

    mainV.backgroundColor = [UIColor redColor];

    [self.view addSubview:mainV];

    _mainV = mainV;

    }

  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/CJH5209/p/6027101.html
Copyright © 2011-2022 走看看