UIView 带有圆角和阴影?

2024-02-19

我已经在一个应用程序上工作了几年,并收到了一个简单的设计请求:圆化 UIView 的角并添加阴影。按照下面给出的操作。

我想要定制UIView...:我只是想要一个带有圆角和浅色阴影的空白白色视图(没有照明效果)。我可以一一做,但通常的clipToBounds/maskToBounds发生冲突。


Swift

// corner radius
blueView.layer.cornerRadius = 10

// border
blueView.layer.borderWidth = 1.0
blueView.layer.borderColor = UIColor.black.cgColor

// shadow
blueView.layer.shadowColor = UIColor.black.cgColor
blueView.layer.shadowOffset = CGSize(width: 3, height: 3)
blueView.layer.shadowOpacity = 0.7
blueView.layer.shadowRadius = 4.0

探索选项

问题 1:阴影被剪掉

如果我们想要将子图层或子视图(如图像)的内容剪切到视图的边界怎么办?

我们可以通过以下方式完成此任务

blueView.layer.masksToBounds = true

(或者,blueView.clipsToBounds = true给出相同的结果 https://stackoverflow.com/a/1177978/3681880.)

But, oh no!阴影也被剪掉了,因为它超出了边界!该怎么办?该怎么办?

Solution

对阴影和边框使用单独的视图。基础视图是透明的并且有阴影。边框视图将它所具有的任何其他子内容剪切到其边框。

// add the shadow to the base view
baseView.backgroundColor = UIColor.clear
baseView.layer.shadowColor = UIColor.black.cgColor
baseView.layer.shadowOffset = CGSize(width: 3, height: 3)
baseView.layer.shadowOpacity = 0.7
baseView.layer.shadowRadius = 4.0

// add the border to subview
let borderView = UIView()
borderView.frame = baseView.bounds
borderView.layer.cornerRadius = 10
borderView.layer.borderColor = UIColor.black.cgColor
borderView.layer.borderWidth = 1.0
borderView.layer.masksToBounds = true
baseView.addSubview(borderView)

// add any other subcontent that you want clipped
let otherSubContent = UIImageView()
otherSubContent.image = UIImage(named: "lion")
otherSubContent.frame = borderView.bounds
borderView.addSubview(otherSubContent)

这给出了以下结果:

问题2:性能不佳

添加圆角和阴影可能会影响性能。您可以通过使用预定义的阴影路径并指定对其进行光栅化来提高性能。可以将以下代码添加到上面的示例中。

baseView.layer.shadowPath = UIBezierPath(roundedRect: baseView.bounds, cornerRadius: 10).cgPath
baseView.layer.shouldRasterize = true
baseView.layer.rasterizationScale = UIScreen.main.scale

See 这个帖子 http://kemal.co/index.php/2013/01/giving-shadow-to-a-rounded-corner-uiview/更多细节。看here http://damir.me/rounded-uiview-with-shadow-the-right-way and here https://coderchrismills.wordpress.com/2011/07/14/uiview-drop-shadow-with-rounded-corners/ also.

这个答案已经用 Swift 4 和 Xcode 9 进行了测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIView 带有圆角和阴影? 的相关文章

随机推荐

  • 将表单发布到更多 URL

    有没有办法将表单发布到更多网址 我需要它在 JavaScript 中 例如 我有 2 个文档 1 php 和 2 php 我希望表单将数据发布到这两个文件 但转到 1 php 你知道有什么办法吗 您需要一个带有操作 1 php 和 jQue
  • 将上下文菜单添加到 Windows 资源管理器以运行 BAT 文件

    有什么方法可以向 Windows 资源管理器上下文菜单添加一个新条目 该条目可以使用所选文件作为参数来运行 BAT 文件 命令 具体来说 我需要这样做 pscp pw password E File txt email protected
  • 如何使用提供的 url 从 s3 下载文件?

    在我的应用程序中 我将获取 s3 文件的 url 例如 https s3 amazonaws com account update input csv https s3 amazonaws com account update input
  • Buildr 与 Gradle,优缺点? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 JavaScript 中将异步调用与同步调用结合起来

    我开始学习 javascript 并且有一个关于组合同步和异步调用函数的问题 这只是一个理论问题 但我希望它能传达这个想法 假设我们有一个 javascript 程序来决定我需要购买多少香蕉和橙子 console log buy d ban
  • 禁用 nuxt 代码分割。如何将所有内容打包到一个文件中

    我有一个简单的 vue nuxt 项目 我想从 AWS lambda 提供服务 为此 我想将所有内容分组到一个文件中 我看到 Nuxt 正在分割文件 以便仅在给定时间加载重要的内容 但该应用程序是单个页面 供内部使用 加载时间 内存使用情况
  • 在 Linux 的特定位置添加一行并输出到同一个文件?

    如何在 file txt 中添加第三行 line 1 line 2 line 4 sed 可以做sed 3iline 3 file txt但我想输出到同一个文件 我试过sed 3iline 3 file txt gt gt file txt
  • 使用 CSS 替换表格行颜色?

    我正在使用具有替代行颜色的表格 tr d0 td background color CC9999 color black tr d1 td background color 9999CC color black table tr class
  • 更改 Jquery UI Accordion 的动画速度

    我正在使用 Jquery UI Accordion 但我没有在文档中找到有关如何更改动画速度的任何内容 我发现人们建议使用选项 animated bounceslide 但无法找到动画的不同可用选项 我当前的js如下 accordion a
  • 如何从 JAXB 带注释的类生成 JSON 模式?

    我有一个实体类 如下所示 XmlRootElement public class ImageSuffix XmlAttribute private boolean canRead XmlAttribute private boolean c
  • jQuery 倒数计时器 - 倒计时到每个月结束,先开始吗?

    客户想要为他的每月销售进行倒计时 从每个月的第一天开始 服务器时间 本地时间 应该使用的时间 并倒计时到月底 28 天 7 小时 6 分钟 其余的 这背后的逻辑是什么样的 是否有一个库 插件默认执行此操作 任何指向正确方向的指针都会令人惊奇
  • Apache HTTPClient 没有这样的方法 ContentType.create

    我得到的堆栈跟踪是这样的 04 18 36 WARN java lang NoSuchMethodError org apache http entity ContentType create Ljava lang String Lorg
  • Ruby 中的 require_relative 和 require 有什么区别?

    有什么区别require relative and require在鲁比 只要看看docs http ruby doc org core 2 1 2 Kernel html require relative补充内置方法require通过允许
  • 从 PHP 获取 Json 数组

    我是 Android 和 JSON 新手 目前正在尝试从数据库中获取我的数据 但它显示错误 这是我的日志猫 I mytag my json string success 1 message Lecturer s Available lect
  • 如何在 Rust 中使用父模块导入?

    如果你有这样的目录结构 src main rs src module1 blah rs src module1 blah2 rs src utils logging rs 如何使用其他文件中的函数 从 Rust 教程来看 听起来我应该能够做
  • 在 Fluent nHibernate 中将平面视图映射到类层次结构

    我正在开发一个应用程序 它有一个使用比赛结果 时间等的模型 我有一个看起来像这样的模型 public class Competitor public virtual int ID get set public virtual string
  • 在 Google Apps 脚本中访问已发送的电子邮件

    我正在使用 Google 脚本发送一封电子邮件并查找对此的任何回复 应该只有一个回复 但这与这里并不真正相关 理论上 我可以使用搜索 标签和ReplyTo 选项中GmailApp sendEmail跟踪事情 然而 我遇到了一些重叠的问题 担
  • Google Javascript 自定义搜索 API:按图像 url 搜索图像

    我尝试按短语搜索图像并且它有效 但我需要按网址搜索图像 我需要找到相同的图像 但尺寸更大 div div
  • 如何在 IE8 中模拟最小宽度

    IE8 文档说它支持 min width 但它似乎对我不起作用 我想要的最小宽度的 html 位于表格单元格中 我在这里看到另一个问题 建议向每个单元格添加一个 1 像素高度的 div 并设置宽度 但这不起作用 出于某种原因 IE 将其渲染
  • UIView 带有圆角和阴影?

    我已经在一个应用程序上工作了几年 并收到了一个简单的设计请求 圆化 UIView 的角并添加阴影 按照下面给出的操作 我想要定制UIView 我只是想要一个带有圆角和浅色阴影的空白白色视图 没有照明效果 我可以一一做 但通常的clipToB