1. 程式人生 > >點選彈出自定義檢視

點選彈出自定義檢視

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;
}