點選彈出自定義檢視
阿新 • • 發佈:2019-02-10
demo效果
這個效果比較簡單,直接記錄一下。
自定義一個繼承自UIView的檢視,定義兩個方法一個顯示方法,一個消失方法。
/**
* 顯示屬性選擇檢視
*
* @param view 要在哪個檢視中顯示
*/
- (void)showInView:(UIView *)view;
/**
* 屬性檢視的消失
*/
- (void)removeView;
這兩個方法的實現:
/**
* 顯示屬性選擇檢視
*
* @param view 要在哪個檢視中顯示
*/
- (void)showInView:(UIView *)view {
[view addSubview:self];
__weak typeof(self) _weakSelf = self;
self.contentView.frame = CGRectMake(0 , kHeight, kWidth, kATTR_VIEW_HEIGHT);;
[UIView animateWithDuration:0.3 animations:^{
_weakSelf.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
_weakSelf.contentView.frame = CGRectMake(0, kHeight - kATTR_VIEW_HEIGHT, kWidth, kATTR_VIEW_HEIGHT);
}];
}
/**
* 屬性檢視的消失
*/
- (void )removeView {
__weak typeof(self) _weakSelf = self;
[UIView animateWithDuration:0.3 animations:^{
_weakSelf.backgroundColor = [UIColor clearColor];
_weakSelf.contentView.frame = CGRectMake(0, kHeight, kWidth, kATTR_VIEW_HEIGHT);
} completion:^(BOOL finished) {
[_weakSelf removeFromSuperview];
}];
}
然後在這個自定義檢視的初始化方法中新增手勢,點選呼叫檢視消失的方法。
// 新增手勢,點選背景檢視消失
UITapGestureRecognizer *tapBackGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeView)];
tapBackGesture.delegate = self;
[self addGestureRecognizer:tapBackGesture];
我們要初始化一個內容檢視作為基準,點選內容檢視之外的地方作用手勢,檢視之內的不作用手勢,要實現手勢的代理方法。
#pragma mark - UIGestureRecognizerDelegate
//確定點選範圍
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([touch.view isDescendantOfView:self.contentView]) {
return NO;
}
return YES;
}