基本实现思路如下:
先在控制器创建好想要弹出的自定义UIView,其位置放到屏幕 边界之外即可。(看不到就行),点击按钮后将方才的View的frame修成到屏幕可见位置,调用UIView动画使得过度自然即可。效果图如下,同时我们需要实现弹出后最左边的六分之一左右的变暗的效果(通过改变UIView透明度来实现)以及点击变暗区域将抽屉关闭的功能。这时我们需要借助点击手势UITapGestureRecognizer来实现。
A.首先,我们创建好需要弹出的抽屉视图(自定义UIView),以及覆盖在上面的透明度为0.5的一层灰色的view
adView = [[AdvanceSearchViewalloc]initWithFrame:CGRectMake(kWidth,0, kWidth,kHeight)];
alphaView = [[UIViewalloc]initWithFrame:CGRectMake(0,0, kWidth,kHeight)];
[self.viewaddSubview:alphaView];
//创建一个点击事件,点击后回收抽屉!
UITapGestureRecognizer *alphaTap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(Tap:)];
alphaView.backgroundColor = [UIColorblackColor];
alphaView.alpha =0;
//此方法也可行,可以改变透明度
//alphaView.backgroundColor = [[UIColor blueColor ]colorWithAlphaComponent:0.7f];
[alphaViewaddGestureRecognizer:alphaTap];
B.其次实现当我们点击屏幕右上角一个按钮时弹出此抽屉视图,利用动画使得过度自然,此时改变自定义View透明度可以做出周围变暗的效果。- (void)clickAdvanceSearch:(UIButton *)btn {
[UIViewanimateWithDuration:0.5animations:^{
adView.x =kWidth/6.0;
alphaView.alpha =0.5;
} completion:nil];
NSLog(@"clickAdvanceSearch:");
}
C.最后当我们点击灰色区域时将触发回收抽屉的方法!!实现方法如下- (void)Tap:(UITapGestureRecognizer *)tap {
[UIViewanimateWithDuration:0.5animations:^{
adView.x =kWidth;
alphaView.alpha =0;
} completion:nil];
}