• 侧滑栏效果的实现


    侧滑栏效果的实现

    效果

    源码

    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

    细节

  • 相关阅读:
    less和vim中使用正则表达式搜索
    正则表达式解英语单词字谜
    正则表达式中的Quantifiers
    grep正则表达式(二)
    grep正则表达式(一)
    Linux中的touch命令总结(一)
    find命令进阶(三):xargs
    find命令进阶(二):对找到的文件执行操作exec
    构造函数
    Bean的生命周期
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5571415.html
Copyright © 2020-2023  润新知