仅显示 UIView 的角点

2023-11-22

如何只显示 UIView 的角点?

        let view = UIView()
        view.layer.borderColor = UIColor.white.cgColor

        view.layer.borderWidth = 2 
           let maskframe = UIView(frame: CGRect(x:0, y:0, 
          width:view.frame.width, height:view.frame.height))

         view.layer.mask = maskframe.layer.`

这仅掩盖了右边缘,我也不明白它是如何工作的。

like this


尝试用这个class,这里我使用自定义视图绘图CoreGraphics,添加了一些 Inspectable 变量来帮助定制

//
//  CornerView.swift
//  CornersViewSO
//
//  Created by Reinier Melian on 5/31/17.
//  Copyright © 2017 Reinier Melian. All rights reserved.
//

import UIKit
import CoreGraphics

@IBDesignable
class CornerView: UIView {

    @IBInspectable
    var sizeMultiplier : CGFloat = 0.2{
        didSet{
            self.draw(self.bounds)
        }
    }

    @IBInspectable
    var lineWidth : CGFloat = 2{
        didSet{
            self.draw(self.bounds)
        }
    }

    @IBInspectable
    var lineColor : UIColor = UIColor.black{
        didSet{
            self.draw(self.bounds)
        }
    }


    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.clear
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.backgroundColor = UIColor.clear
    }

    func drawCorners()
    {
        let currentContext = UIGraphicsGetCurrentContext()

        currentContext?.setLineWidth(lineWidth)
        currentContext?.setStrokeColor(lineColor.cgColor)

        //first part of top left corner
        currentContext?.beginPath()
        currentContext?.move(to: CGPoint(x: 0, y: 0))
        currentContext?.addLine(to: CGPoint(x: self.bounds.size.width*sizeMultiplier, y: 0))
        currentContext?.strokePath()

        //top rigth corner
        currentContext?.beginPath()
        currentContext?.move(to: CGPoint(x: self.bounds.size.width - self.bounds.size.width*sizeMultiplier, y: 0))
        currentContext?.addLine(to: CGPoint(x: self.bounds.size.width, y: 0))
        currentContext?.addLine(to: CGPoint(x: self.bounds.size.width, y: self.bounds.size.height*sizeMultiplier))
        currentContext?.strokePath()

        //bottom rigth corner
        currentContext?.beginPath()
        currentContext?.move(to: CGPoint(x: self.bounds.size.width, y: self.bounds.size.height - self.bounds.size.height*sizeMultiplier))
        currentContext?.addLine(to: CGPoint(x: self.bounds.size.width, y: self.bounds.size.height))
        currentContext?.addLine(to: CGPoint(x: self.bounds.size.width - self.bounds.size.width*sizeMultiplier, y: self.bounds.size.height))
        currentContext?.strokePath()

        //bottom left corner
        currentContext?.beginPath()
        currentContext?.move(to: CGPoint(x: self.bounds.size.width*sizeMultiplier, y: self.bounds.size.height))
        currentContext?.addLine(to: CGPoint(x: 0, y: self.bounds.size.height))
        currentContext?.addLine(to: CGPoint(x: 0, y: self.bounds.size.height - self.bounds.size.height*sizeMultiplier))
        currentContext?.strokePath()

        //second part of top left corner
        currentContext?.beginPath()
        currentContext?.move(to: CGPoint(x: 0, y: self.bounds.size.height*sizeMultiplier))
        currentContext?.addLine(to: CGPoint(x: 0, y: 0))
        currentContext?.strokePath()
    }


    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
        super.draw(rect)
        self.drawCorners()
    }


}

EDITED

使用代码示例

import UIKit

class ViewController: UIViewController {

    var cornerViewCode : CornerView?
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.cornerViewCode = CornerView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
        self.view.addSubview(self.cornerViewCode!)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

这就是它的样子

enter image description here

希望这可以帮助

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

仅显示 UIView 的角点 的相关文章

随机推荐

  • 任何在多个 div 元素中随机排列内容的方法

    我对 Javascript 比较陌生 想知道是否有一种快速的方法来随机播放多个内容中包含的内容 div 标签 例如 div span alpha span img src alpha jpg div div span beta span i
  • 如何在web.config中添加xml?

    我有一些复杂的数据 用于 xml 格式的应用程序配置 我想将此 xml 字符串保留在 web config 中 是否可以在 web config 中添加一个大的 xml 字符串并在任何地方的代码中获取它 如果您不想编写配置节处理程序 则可以
  • 在不使用 Terraform 文件配置程序的情况下将本地文件部署到实例

    与其他几位发布到 StackOverflow 的用户一样 我遇到了文件配置程序的问题 Terraform 文档说我们不应该依赖它们 解决文件配置程序 特别是本地配置文件和脚本 的最佳方法是什么 一种效果很好且不需要直接连接到实例的解决方案是
  • django-admin 自定义命令中的两个参数

    我有一个workingdjango admin 自定义命令 我用它来填充新信息的数据库 再说一次 一切正常 但是 我现在稍微更改了我的模型和函数 以接受两个参数作为元组 名字and姓氏 而不仅仅是 名字 下面的先前代码 工作 使用 mana
  • Visual Studio 2013 Windows Phone 模拟器未部署

    我正在使用 VS 2013 Express 并且有一个 Windows Phone 8 简单应用程序 当我开始使用任何模拟器调试应用程序时 它无法将 XAP 部署到模拟器中 10 分钟后出现错误消息 出现部署错误 继续吗 这是调试应用程序时
  • 在 Visual Studio 中更改“实现接口”模板

    我经常在 Visual Studio 2008 中使用 实现接口 快捷方式 我的 问题 是我希望 Visual Studio 使用String 别名而不是string在每一个例子中 由于我被迫使用字符串而不是字符串 这将为我节省大量时间 例
  • android.provider.Telephony 发生了什么?

    有谁知道发生了什么事android provider Telephony 它已经不在那里了 如果你读过this从 android developer 邮件列表中发帖 您可以看到android provider Telephony是开源版本的
  • 在 Java DOM 中获取节点的内部 XML 作为字符串

    我有一个 XML org w3c dom Node 如下所示
  • GCP Kubernetes 工作负载“没有最低可用性”

    背景 我正在尝试在 Google Cloud Platform 上设置 Bitcoin Core regtest pod 我借用了一些代码https gist github com zquestz 0007d1ede543478d44556
  • UICollectionView:组合布局禁用预取?

    我有一个非常简单的UICollectionView它使用组合布局轻松实现动态单元高度 不幸的是 这样做似乎会禁用内容预取UICollectionViewDataSourcePrefetching 在下面的示例代码中 collectionVi
  • Ruby 中括号周围的间距

    我最近在使路径正常工作时遇到了一些问题 事实证明 解决方案很简单 但我遇到了一个意想不到的问题 阻止了我实现它 erb 模板中包含的以下行可以完美运行 这个没有 在这种情况下 左括号前似乎不允许有空格 我得到的错误是这样的 app view
  • 使用适用于 SQL Server 的 PHP 且不使用 PDO 来防止 SQL 注入 [重复]

    这个问题在这里已经有答案了 我可以尽可能地清理和验证我的输入 但这绝对不能涵盖所有内容 如果我足够努力 足够彻底地擦洗 我将完全擦除我的输入 我意识到有很多关于这个主题的帖子 但似乎他们总是回到 PDO 或 Mysql 是的 即使有人发布有
  • Jenkins 将徽章设置为预构建步骤

    我不确定这里的术语是否完全正确 所以我会尽力解释 我使用 Jenkins 来运行 Java 自动化 有许多长时间运行 2 10 小时 的作业针对被测产品的不同版本不断执行 我需要一种方法来快速查看作业的 构建历史记录 框 并查看哪个作业正在
  • 鼠标悬停时播放 Gif 并在鼠标移开时暂停 Gif 而不替换图像?

    我正在尝试寻找一个代码示例 该示例允许用户在鼠标悬停时制作 gif 动画 并在鼠标移出时暂停 我看过很多教程都在谈论这个 但我想要不同的效果 我注意到大多数 GIF 在鼠标移开时都会 重置 也就是说 要么 gif 被通用图像覆盖 要么动画恢
  • 实时模板匹配 - OpenCV、C++

    我正在尝试使用模板来实现实时跟踪 我希望每一帧都更新模板 我所做的主要修改是 1 将模板匹配和minmaxLoc分成单独的模块 即 TplMatch and minmax 函数 分别 2 内部track 函数中 select flag 始终
  • gcov 可以处理共享对象吗?

    我最近使用 gcov 来收集代码覆盖率信息 gcov 与可执行应用程序配合得很好 但是当我尝试加载 so 文件时 出现此错误 未知符号 gcov merge add 然后我在谷歌上搜索 有人说添加 lgcov 到链接标志 LDFLAGS 我
  • 在 Excel 2019 中应用 IRibbonUI.ActivateTab

    我有现有的 VBA 代码 我的 在 Excel 2010 中工作 可激活自定义功能区选项卡 IRibbonUIObjectName ActivateTab tabID 该代码作为子程序中的标准操作存在 用于处理活动窗口的更改 在相关时激活选
  • Node.js setInterval() 在 25 天后停止执行

    在我的 Node js 应用程序中 我使用setInterval 每 1 小时运行一次特定功能 该函数正常执行大约 25 天 然后计时器停止触发 25 天似乎非常接近 Node js 的时间TIMEOUT MAX 2 31 毫秒 25 天
  • ASP.net MVC 中的自定义表单身份验证/授权方案

    我正在尝试使用表单身份验证在 ASP NET MVC 中创建自定义身份验证方案 我的想法是 我可能会在网站上有不同的区域进行管理 批准者区域和一般用户区域 并且这些区域将使用不同的登录页面 等等 这就是我想要发生的事情 用户访问受限页面 现
  • 仅显示 UIView 的角点

    如何只显示 UIView 的角点 let view UIView view layer borderColor UIColor white cgColor view layer borderWidth 2 let maskframe UIV