iOS实现抽屉效果

本文实例为大家分享了iOS实现抽屉效果的具体代码,供大家参考,具体内容如下

抽屉效果:

#import "DragerViewController.h"

#define screenW [UIScreen mainScreen].bounds.size.width

@interface DragerViewController ()

@property (nonatomic, weak) UIView *leftV;

@property (nonatomic, weak) UIView *rightV;

@property (nonatomic, weak) UIView *mainV;

@end

@implementation DragerViewController

- (void)viewDidLoad {

[super viewDidLoad];

//添加子控件

[self setUp];

//添加手势

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

[self.mainV addGestureRecognizer:pan];

//给控制器的View添加点按手势

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];

[self.view addGestureRecognizer:tap];

}

- (void)tap{

//让MainV复位

[UIView animateWithDuration:0.5 animations:^{

self.mainV.frame = self.view.bounds;

}];

}

#define targetR 275

#define targetL -275

- (void)pan:(UIPanGestureRecognizer *)pan{

//获取偏移量

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

//为什么不使用transform,是因为我们还要去修改高度,使用transform,只能修改,x,y

//self.mainV.transform = CGAffineTransformTranslate(self.mainV.transform, transP.x, 0);

self.mainV.frame = [self frameWithOffsetX:transP.x];

//判断拖动的方向

if(self.mainV.frame.origin.x > 0){

//向右

self.rightV.hidden = YES;

}else if(self.mainV.frame.origin.x < 0){

//向左

self.rightV.hidden = NO;

}

//当手指松开时,做自动定位.

CGFloat target = 0;

if (pan.state == UIGestureRecognizerStateEnded) {

if (self.mainV.frame.origin.x > screenW * 0.5 ) {

//1判断在右侧

//当前View的x有没有大于屏幕宽度的一半,大于就是在右侧

target = targetR;

}else if(CGRectGetMaxX(self.mainV.frame) < screenW * 0.5){

//2.判断在左侧

//当前View的最大的x有没有小于屏幕宽度的一半,小于就是在左侧

target = targetL;

}

//计算当前mainV的frame.

CGFloat offset = target - self.mainV.frame.origin.x;

[UIView animateWithDuration:0.5 animations:^{

self.mainV.frame = [self frameWithOffsetX:offset];

}];

}

//复位

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

}

#define maxY 100

//根据偏移量计算MainV的frame

- (CGRect)frameWithOffsetX:(CGFloat)offsetX {

NSLog(@"offsetX===%f",offsetX);

CGRect frame = self.mainV.frame;

NSLog(@"x====%f",frame.origin.x);

frame.origin.x += offsetX;

//当拖动的View的x值等于屏幕宽度时,maxY为最大,最大为100

// 375 * 100 / 375 = 100

//对计算的结果取绝对值

CGFloat y = fabs( frame.origin.x * maxY / screenW);

frame.origin.y = y;

//屏幕的高度减去两倍的Y值

frame.size.height = [UIScreen mainScreen].bounds.size.height - (2 * frame.origin.y);

return frame;

}

- (void)setUp{

//leftV

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

leftV.backgroundColor = [UIColor blueColor];

self.leftV = leftV;

[self.view addSubview:leftV];

//rightV

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

rightV.backgroundColor = [UIColor greenColor];

self.rightV = rightV;

[self.view addSubview:rightV];

//mianV

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

mainV.backgroundColor = [UIColor redColor];

self.mainV = mainV;

[self.view addSubview:mainV];

}

@end

以上是 iOS实现抽屉效果 的全部内容, 来源链接: utcz.com/z/328141.html

回到顶部