iOS实现抽屉效果-创新互联

本文实例为大家分享了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

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:iOS实现抽屉效果-创新互联
文章转载:http://scyanting.com/article/dpsehs.html