如何对 UIView 应用多个遮罩

2024-01-01

我有一个关于如何将多个蒙版应用到已经有蒙版的 UIView 的问题。

情况:
我有一个带有活动蒙版的视图,它在左上角创建一个洞,这是一个模板 UIView,可在项目中的任何地方重用。在项目的后期,我希望能够创建第二个孔,但这次是在右下角,这不需要创建一个全新的 UIView。

问题:
当我应用底部面罩时,它当然会取代第一个面罩,从而去除顶部的孔......有没有办法将它们两者结合起来?就这一点而言,将任何现有的面具与新的面具结合起来?

先感谢您!


根据@Sharad 的回答,我意识到重新添加视图的矩形将使我能够将原始蒙版和新蒙版合并为一个。

这是我的解决方案:

func cutCircle(inView view: UIView, withRect rect: CGRect) {

    // Create new path and mask
    let newMask = CAShapeLayer()
    let newPath = UIBezierPath(ovalIn: rect)

    // Create path to clip
    let newClipPath = UIBezierPath(rect: view.bounds)
    newClipPath.append(newPath)

    // If view already has a mask
    if let originalMask = view.layer.mask,
        let originalShape = originalMask as? CAShapeLayer,
        let originalPath = originalShape.path {

        // Create bezierpath from original mask's path
        let originalBezierPath = UIBezierPath(cgPath: originalPath)

        // Append view's bounds to "reset" the mask path before we re-apply the original
        newClipPath.append(UIBezierPath(rect: view.bounds))

        // Combine new and original paths
        newClipPath.append(originalBezierPath)

    }

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

如何对 UIView 应用多个遮罩 的相关文章

  • Expo eas-cli iOS 构建失败

    我已经使用 React Native 创建了一个应用程序 并尝试通过 Expo 的 eas cli 创建一个 iOS 应用程序商店 跑步时eas build platform ios the Fastlane build failed wi
  • 当我启动项目时没有 viewcontroller.swift 文件 [重复]

    这个问题在这里已经有答案了 我尝试启动该项目并使用视图控制器 但我没有看到它 仅appdelegate和scenedelegate和contentview 下面的代码应该添加到视图控制器中 但我不知道添加到哪里 它不断给我一条错误消息 指出
  • Braintree DropIn + Apple Pay,未出现 Apple Pay 项目

    我成功调用DropIn来自 Braintree SDK 的视图 这BTDropInRequest设置应显示三项 PayPal 信用卡 苹果支付 但由于某种原因在DropIn视图仅呈现两个项目而不是三个 PayPal 信用卡 我做错了什么 准
  • iPhone Core Graphics 子视图的粗虚线

    我有一个UIView在其中我通过覆盖使用 Core Graphics 画了一条线drawRect 该视图还包含一个子视图 该子视图也绘制一条线 然而 虽然两个视图都使用几乎相同的代码 至少出于测试目的 但在它们上绘制的线看起来并不相同 正如
  • Swift:如何在 println 之后刷新标准输出?

    如何在 Swift 中刷新标准输出println命令 也就是说 Swift 相当于什么fflush stdout in C 您可以使用 fflush stdout 导入 libc 后 if os Linux import Glibc els
  • 同一应用程序的不同版本取决于设备(应用程序商店)

    我已经将我的游戏提交到App Store并更新了 现在最新版本是每个下载我游戏的人都应该得到的版本 对吗 现在的问题是 当我从 iPad mini 上的 App Store 下载游戏时 我得到的是正确的版本 但是当我从 iPad 2 下载游
  • iOS 应用内购买沙箱测试显示我的密码错误

    我在 itunesconnect 中创建了一个 Sandbox Tester 帐户 并通过我在网络上注册的电子邮件验证了电子邮件地址 验证后 我尝试使用沙盒帐户在我的应用程序中购买商品 并收到更改密码的提醒 所以我做了 然后我尝试使用新密码
  • “无法调用非函数类型‘HTTPURLResponse’的值?”(Alamofire 4.0) [Swift 3.0]

    我收到此错误 无法调用非函数类型 HTTPURLResponse 的值 关于该部分 response request response data error 我想知道是否有人可以帮助我解决这个问题 Alamofire download ur
  • 如何创建一个 NSMutableArray 并为其分配一个特定的对象?

    我刚刚开始接触 Obj C 并且希望创建一个 MKAnnotations 数组 我已经创建了名为的 MKAnnotation 类TruckLocation其中包含名称 描述 纬度和经度 这是到目前为止我所拥有的数组 NSMutableArr
  • ios 8 opengl es 1.1 已停产?

    我们即将在 iOS 应用商店上推出一款游戏 最近我们发现它无法在 iOS 8 上运行 游戏加载到黑屏 但其他一切似乎都可以运行 可以听到音乐 对触摸屏有反应 但显示屏上没有任何反应 我们的引擎相当旧并且使用 OpenGL ES 1 1 我现
  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • NSPredicate 查询不包含特定字符串

    对这个问题进行了高低查找 但找不到我的答案 我正在查询核心数据以查找不等于指定字符串的所有记录 例如 所有不等于当前会话ID的记录 我已经尝试过这些但无济于事 NSPredicate predicate NSPredicate predic
  • 如何修复C风格的for语句?

    什么是正确的修复方法C 风格的 for 语句对于下面发布的代码 目前我正在交战 C 风格的 for 语句已弃用 并将在将来删除 斯威夫特的版本 var ifaddr UnsafeMutablePointer
  • CoreAnimation 性能分析 - CAReplicatorLayer 与 CAShapeLayer

    我正在制作一个依赖 CoreAnimation 的应用程序 它有一个 CAReplicatorLayer 和一个 CAShapeLayer 作为子层 当进行 12 次复制 然后对路径进行动画处理 在 touchMoved 上更改它 时 一旦
  • CNContact 添加新的联系人问题

    我在通过以下方式添加联系人时遇到问题联系框架 我使用的是装有 iOS 12 1 2 的 iPhone 5s 设备 我添加联系人的代码如下 let saveRequest CNSaveRequest saveRequest add self
  • 检测您何时进入/退出 Xamarin.iOS 中的主线程

    Xamarin MonoTouch 有没有办法检测主线程中是否正在调用代码 我正在寻找类似于Java的东西EventQueue isEventDispatchThread 我发现 Swing 编程很方便assert时不时 或有时assert
  • macOS 应用程序中还需要 Swift 的嵌入式 dylib吗?

    Swift 5 发行说明说 对于运行 iOS 12 2 watchOS 5 2 和 tvOS 12 2 的设备 Swift 应用程序不再在构建变体中包含 Swift 标准库和 Swift SDK 覆盖的动态链接库 但在同一上下文中没有提及
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字

随机推荐