iOS - 点击弹出自定义视图

这篇博客介绍了如何在iOS应用中创建一个自定义视图,并通过手势识别来实现点击显示和消失的效果。开发者首先定义了一个继承自UIView的类,包含显示和消失两个方法,然后在初始化过程中添加了手势识别器,当点击内容视图外部时,调用视图消失的方法。此外,还强调了需要实现手势代理方法以确保手势仅在内容视图外部生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

demo传送门

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值