首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当在视图外部点击时,关闭UIView

的一种常见的做法是通过添加一个透明的背景视图,并在该背景视图上添加一个手势识别器。当手势被识别为点击时,可以触发关闭UIView的操作。

具体实现步骤如下:

  1. 创建一个背景视图,并设置其颜色为透明。
  2. 将背景视图添加到父视图上,并将其放置在需要关闭的UIView之后。
  3. 添加一个手势识别器到背景视图上,并设置其点击事件的处理方法。
  4. 在点击事件的处理方法中,判断点击的位置是否在UIView的范围内,如果不在,则关闭UIView。

以下是一个示例代码,用于在Swift语言中实现上述功能:

代码语言:txt
复制
// 创建一个背景视图
let backgroundView = UIView()
backgroundView.backgroundColor = UIColor.clear

// 将背景视图添加到父视图上
parentView.addSubview(backgroundView)
parentView.sendSubviewToBack(backgroundView)

// 添加手势识别器到背景视图上
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
backgroundView.addGestureRecognizer(tapGesture)

// 点击事件的处理方法
@objc func handleTap(_ gesture: UITapGestureRecognizer) {
    let tapLocation = gesture.location(in: parentView)
    
    // 判断点击的位置是否在UIView的范围内
    if !view.frame.contains(tapLocation) {
        // 关闭UIView的操作
        view.removeFromSuperview()
    }
}

这种关闭UIView的方式适用于各种场景,例如弹出窗口、菜单、提示框等。腾讯云提供了一系列云服务和产品,其中与UIView关闭相关的产品包括腾讯云移动应用分析(https://cloud.tencent.com/product/mat)和腾讯云移动推送(https://cloud.tencent.com/product/umeng)等。这些产品可以帮助开发者更好地分析和推送移动应用,提升用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【iOS 开发】父视图外部视图点击响应 - hitTest

面试被问过两次了的一个问题,记录一下:假如一个 UIView(我们称作 FatherView),有一个 subview(我们称作 ChildView),这个 ChildView 在 FatherView...的 frame 外部,那么默认情况下,这个 ChildView 被点击的时候,并不会触发 FatherView 的点击响应链(这是合情合理的,FatherView 所在的位置都没被点击,它不遍历 subviews...其实思路是很简单的,监控屏幕上的所有点击事件的区域,如果这个区域和我们的 UIView 以及其 subview 的 CGRect 有重合,就作出反应。...Screen Shot 代码是很简单的,现在让灰色的视图作为父视图,蓝色、红色的作为子视图,只要灰色视图实现了上述方法,就可以让蓝色视图像红色视图一样,可以相应点击事件。 ?...,这个方法都会执行,这必然带来性能消耗,这也是 Apple 默认不使用这个方式的原因之一吧 HitTest 会使得我们的蓝色的 UIView 可以相应点击,但是它被点击的之后,

1.1K20
  • iOS开发中UITableViewCell点击视图背景透明的解决方法

    iOS开发中UITableViewCell点击视图背景透明的解决方法         在做iOS项目的开发中,UITableView控件的应用十分广泛。...在进行自定义UITableViewCell,经常有小伙伴遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当用户点击UITableViewCell或者选中UITableViewCell...,Cell上的子视图发生了奇怪的变化,其背景色变透明了,如果添加在Cell上的子视图只是一个色块,那么我们看起来,这个子视图好像莫名其妙的消失了一样。...这时,如果用户点击或者选中了某个Cell,系统会自动将其上子视图的背景色改成透明以便统一Cell的整体背景颜色。...如果需要使用Cell的选中风格同时又不想让Cell上的子视图收到影响,我们可以继承UITableViewCell后在其中覆写父类的如下两个方法,在这些方法中重新设置子视图的背景色: //这个方法在Cell

    1.3K30

    IOS开发系列——UIView专题之二:动画篇【整理,部分原创】

    2UIView动画 2.1概述 UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验。...UIKit直接将动画集成到UIView类中,实现简单动画的创建过程。UIView类定义了几个内在支持动画的属性声明,当这些属性发生改变视图为其变化过程提供内建的动画支持。...执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画通知视图,为此需要将改变属性的代码包装到一个代码块中。...使用Core Animation,应该将CATransition应用到视图的默认图层([myView layer])而不是视图本身。...+ (Class)layerClass 返回值 一个用来创建视图layer的类 讨论 重写子类来指定一个自定义类用来显示。当在创建视图layer时候调用。默认的值是CALayer类对象。

    1.4K10

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    您的目标是在用户点击其中一个单元格显示视频播放器。 1. Adding Local Playback 您可以播放两种类型的视频。 您将看到的第一个是当前位于手机存储中的类型。...然后,您需要添加一些自定义手势,例如点击打开声音和双击将其更改为 2 倍速度。当您想对事物的工作方式进行非常具体的控制,最好编写自己的视频视图。 让事情顺利进行是你的工作。...2) 当有人双击播放器视图,您可以添加一个侦听器。 这会在 2x 和 1x的播放速率之间切换。 3) 当有人单击播放器视图,您可以添加一个侦听器。 这会切换视频的静音状态。...再次构建并运行,您将能够点击和双击来播放剪辑的速度和音量。 这表明添加自定义控件以与自定义视频视图交互是多么容易。 现在,您只需轻按一下即可提高音量并进入快播状态。 5....当您这样做,您会注意到即使视频循环播放器没有发出任何噪音,您的音乐也已关闭

    6.9K10

    【iOS 开发】从 setNeedsLayout 说起

    : setNeedsLayout 会给当前 UIView 立一个 flag,以表示后续应该调用 layoutSubviews 方法,以调整当前视图及其子视图的布局...当然你可以给多个 UIView 设置 setNeedsLayout,然后当下一个 View Drawing Cycle 到来时,多个 UIView视图会一同更改布局。...---- 如何善用 View Drawing Cycle 一个很常见的例子是,一个 iPad App,横屏和竖屏界面布局不一样,那么你可以监听设备旋转,在设备旋转执行 setNeedsLayout... 和 drawRect:) 但有些情况比较特殊:你打开 iOS 的时钟应用,去看里面的秒表页面,这个页面里面的两个按钮是没有 UIButton 默认的动画的,点击之后...当然默认这个“选项”是关闭的。

    69410

    【IOS开发基础系列】UIView专题

    UIView类定义了几个内在支持动画的属性声明,当这些属性发生改变视图为其变化过程提供内建的动画支持。         ...执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画通知视图,为此需要将改变属性的代码包装到一个代码块中。...使用Core Animation,应该将CATransition应用到视图的默认图层([myView layer])而不是视图本身。         ...+ (Class)layerClass 返回值     一个用来创建视图layer的类 讨论     重写子类来指定一个自定义类用来显示。当在创建视图layer时候调用。...4.2.2 (未解决)DrawRect如何清空之前内容 4.2.3 DrawRect之后注意用hitTest:withEvent:方法处理事件接收 //用户触摸第一间加载内容 - (UIView*

    59230

    图层几何学 -- iOS Core Animation 系列二

    frame代表了图层的外部坐标(也就是在父图层上占据的空间),bounds是内部坐标({0, 0}通常是图层的左上角),center和position都代表了相对于父图层anchorPoint所在的位置...视图的frame、bounds、center属性仅仅是存取方法,当操纵视图的frame,实际上是在改变视图对应的CALayer的frame, 不能独立于图层之外改变视图的frame....3.1 z坐标轴 和UIView的二维坐标不同,CALayer存在于一个三维空间中,它还提供了zPostion和anchorPointz属性。...3.2 zPosition演示代码 我们演示下改变zPosition会怎么改变视图的显示顺序。 首先我在SB中设置两个视图,如下图: ?..."); } else { NSLog(@"点击了白色图层"); } } } 运行点击可以在控制台看到NSLog的输出信息。

    60230

    自定义一个浮层弹窗视图

    CoreAnimation是iOS中实现动画的框架,整个iOS中的动画(比如UIView中封装的动画、UIViewController切换的转场动画、UITableViewCell移除增添的动画等,...; 4,移除弹窗视图的时候,就将弹窗背景视图从父视图上移除即可。...required */ @property (nonatomic, strong)UIView *customView; /** 决定hud视图是否展示的开关 required */ @property...locationInView:self]; if (CGRectContainsPoint(self.customView.frame, tapPoint)) { return;//点击点在自定义视图范围之外才会使提示视图消失...展示浮层上的自定义提示视图的时候,我使用了UIView的动画,可以在这里实现浮层上的自定义提示视图展示时候的动画。 给浮层的背景视图添加一个点击手势,以在点击的时候移除该浮层。

    1.4K30

    iOS 事件处理机制与图像渲染过程

    UIView和CALayer是一个平行的层级关系,每一个UIView都有一个CALayer实例的图层属性,也就是所谓的backing layer,视图的职责就是创建并管理这个图层,以确保当子视图在层级关系中添加或者被移除的时候...当一个触摸事件到来时,RunLoop 被唤醒,App 中的代码会执行一些操作,比如创建和调整视图层级、设置 UIView 的 frame、修改 CALayer 的透明度、为视图添加一个动画;这些操作最终都会被...当在操作 UI ,比如改变了 Frame、更新了 UIView/CALayer 的层次,或者手动调用了 UIView/CALayer 的 setNeedsLayout/setNeedsDisplay...Core Animation通常对CALayer的所有属性(可动画的属性)做动画,但是UIView是怎么把它关联的图层的这个特性关闭了呢?...Node 刚创建,并不会在内部新建 UIView 和 CALayer,直到第一次在主线程访问 view 或 layer 属性,它才会在内部生成对应的对象。

    5.5K100

    iOS点击TableView的cell显示弹出动画

    最近使用豌豆荚一览的app看到它的点击cell后弹出界面的动画很帅,所以自己琢磨着实现了一个,效果如下: image 仔细观察的话效果分为几个部分,点击cell的时候,首先背景会出现阴影,只有点击的...) UIView *bgView;// 阴影视图 @property (nonatomic, strong) BookListCellView *selectedCell;// 选中的cell 这个声明要做成整个视图控制器可调用的...因为这三个视图是在我们点击的时候添加的,我们必须进行移除,否则从详情界面回来列表界面之后,这三个视图还会存在,所以我们要在viewWillAppear方法中将其移除: - (void)viewWillAppear...,背景的阴影视图是固定大小的,即使覆盖整个界面,cell视图和纯白视图要根据点击的位置决定,所以阴影视图可以直接写一个方法来创建: // 阴影视图 - (UIView *)bgView { if...:self.selectedCell]; // 实例化纯白视图,范围和cell视图一样,先做成透明 self.tempView = [[UIView alloc] initWithFrame

    1.4K10

    iOS事件响应控制 原

    以前遇到一个项目,一个UIImageView对象上面有一个UIButton对象,然而项目的需求需要在点击 button的同时,UIImageView也接收到点击事件,在不使用代理和通知方法的前提下...1、先在视图层级关系中找到应该响应事件的那个视图。...UIApplication会取出队列中最前面的事件,发消息给UIWindow,然后UIWindow会对其所有子视图调用hitTest:withEvent:这个方法,这个方法会返回一个UIView的对象,...可以证明,在事件视图寻找中,UIImageView我们重写hitTest:withEvent:方法后,切断了寻找链,如果我们这个做: -(UIView *)hitTest:(CGPoint)point ...现在,我们把刚才UIimageView里重写的hitTest:withEvent:方法注释掉,给btn添加一个点击方法,同时将用户交互关闭: - (void)viewDidLoad {     [super

    54040

    UIView不可不知的秘密

    2、UIView的作用:描画和动画,视图负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体等等。...我在前面详细介绍了setNeedsDisplay , setNeedsLayout和layoutIfNeeded 详情请点击。...下面介绍的是view添加以及删除所触发的方法 // 当视图添加子视图时调用 - (void)didAddSubview:(UIView *)subview; // 当子视图从本视图移除时调用...- (void)willRemoveSubview:(UIView *)subview; // 当视图即将加入父视图 / 当视图即将从父视图移除时调用 - (void)willMoveToSuperview...:(nullable UIView *)newSuperview; // 当试图加入父视图 / 当视图从父视图移除时调用 - (void)didMoveToSuperview; // 当视图即将加入父视图

    1.7K90

    翻译_iOS视图编程指南(View Programming Guide for iOS)之视图和窗口体系

    无论你是使用系统视图还是自定义视图,都需要理解由UIVIew和UIWindow类所提供的基础结构。这些类提供复杂的设施来管理视图的布局和显示。...应用中的视图包括窗口(本身也是视图),一个作为视图容器的UIView对象,一个图片视图,一个展示控制的工具条,一个条按钮项(它本身不是视图,但他管理内部的视图)。...视图层次和子视图的管理#### 一个视图在呈现自身内容之外,还可以作为其他视图的容器。当一个视图包含另一个视图,两个视图间的父子关系就创建出来了。在关系中,孩子视图就是子视图,父亲视图就是超视图。...当在特定视图中发生触摸事件,系统将会把带有触摸信息的事件对象直接发送到视图的处理机制中。然而,如果视图没有处理特定的触摸事件,它将会把事件对象传送到父视图。...当你视图的内容改变,你没有直接重新绘制这些改变。相反,你可以使用setNeedsDisplay或者setNeedsDisplayInRect:方法使你的视图失效。

    99840
    领券