Swift中如何在选中或触摸子视图时将其置于顶层?
实现触摸子视图时将其置于顶层的方案
这问题我之前做类似重叠视图布局时也碰到过,其实实现起来挺简单的,核心就是利用UIKit的视图层级控制方法,再给每个可交互的子视图加上触摸响应就行,具体步骤和代码如下:
第一步:开启UIImageView的用户交互
默认情况下UIImageView的isUserInteractionEnabled属性是false,得先把它设为true,不然视图接收不到任何触摸事件。第二步:添加触摸手势识别器
给每个UIImageView绑定UITapGestureRecognizer,指定一个处理触摸事件的方法。第三步:在触摸事件中把视图移到顶层
调用父视图的bringSubviewToFront(_:)方法,就能把当前触摸的子视图立刻移到所有子视图的最上层。
完整代码示例
// 第一个添加到baseView的视图 let imageViewOne = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) imageViewOne.image = UIImage(named: "yourImage1") // 替换成你自己的图片资源名 imageViewOne.isUserInteractionEnabled = true // 添加点击手势 let tapOne = UITapGestureRecognizer(target: self, action: #selector(handleViewTap(_:))) imageViewOne.addGestureRecognizer(tapOne) baseView.addSubview(imageViewOne) // 第二个添加到baseView的视图 let imageViewTwo = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) imageViewTwo.image = UIImage(named: "yourImage2") // 替换成你自己的图片资源名 imageViewTwo.isUserInteractionEnabled = true // 添加点击手势 let tapTwo = UITapGestureRecognizer(target: self, action: #selector(handleViewTap(_:))) imageViewTwo.addGestureRecognizer(tapTwo) baseView.addSubview(imageViewTwo) // 触摸事件处理方法 @objc func handleViewTap(_ sender: UITapGestureRecognizer) { guard let tappedView = sender.view else { return } // 将触摸的视图移到父视图的最顶层 baseView.bringSubviewToFront(tappedView) }
补充说明
当你调用addSubview(_:)时,系统会把新视图插入到父视图的子视图数组末尾——而视图的显示层级是按数组顺序来的:数组越靠后的视图,显示优先级越高(会覆盖前面的视图)。bringSubviewToFront(_:)的作用就是把指定子视图移到这个数组的最后,从而让它立刻显示在最上层。
内容的提问来源于stack exchange,提问作者ciklukylok
相关产品推荐
相关产品推荐

