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 带有圆角和阴影? 的相关文章

  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • iOS 解决方法:在没有 CSS 属性的情况下平滑滚动 滚动行为:平滑?

    编辑 我找到了一个 jQuery 解决方案 https codepen io chriscoyier pen dpBMVP https codepen io chriscoyier pen dpBMVP这个确实可以在 iOS 上运行 我想
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • ios7 navigationController PushViewController 动画错误

    看来我在 navigationController PushViewController 方法中发现了一个错误 为了重新创建它 我采用了示例主详细信息项目并对 didSelectRow method void tableView UITab
  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • 在iOS上,“添加到主页”缓存保存在哪里,如何清除它?

    我正在 iPad iOS v7 上制作一个 html5 游戏 当我将其添加到主页时 它非常顽固地释放缓存 如果我在 Safari 中查看它 这会按照您所期望的方式工作 如果我刷新一次或两次 页面就会以最新状态缓存 但在主页上却是另一回事 它
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • iOS 中的构建对象文件扩展名是什么?

    当我在项目中构建java对象类时 将创建带有 class扩展名的构建文件 并且人类不可读 快速构建文件怎么样 example car java gt build gt car class 构建后会是什么 car swift gt build
  • 错误:更改核心数据模型后架构armv7的重复符号

    我有一个使用核心数据框架的应用程序 我工作得很好 我刚刚更改了数据模型 向一个实体添加一个属性 当我尝试构建它时 出现错误 duplicate symbol OBJC METACLASS AccountFolder in Users XXX
  • UIScrollView - 启用分页后,我可以“更改”页面宽度吗?

    将滚动视图 将 pagingEnabled 设置为 YES 将页面宽度设置为滚动视图边界以外的其他值的最简单方法是什么 让我举个例子 假设我有一个包含 10 个项目的滚动视图 每个项目的宽度为 150 像素 而我的滚动视图的宽度为 300
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 如何反转 CGPath 的点顺序

    我想画一个圆圈 并用它打出字母 为此 我需要顺时针抚摸圆圈 逆时针抚摸字母 这一切都很好 但是当我使用 Core Text 获取字母路径时 我不知道如何从本质上反转该路径 不是镜像或旋转或任何东西 这很简单 我希望点笔画顺序是逆时针的 这实
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged

随机推荐

  • 将表单发布到更多 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