Day26-玩弄一下IBDesignable与IBInspectable来方便设置渐层功能

想要玩弄这两个attribute,就得对他们有所了解,否则玩得不尽兴,因为很有可能你设置了这两个属性不支援的型别,所以无法显示在属性检阅器让你玩。

IBInspectable可以支援的型别有「IntCGFloatDoubleStringBoolCGPointCGSizeCGRectUIColorUIImage」,如果你设置的型别不是这些型别的话,那属性检阅器将不会产生。

顺带一提,这些型别的资讯我是查阅AppCoda的书才找到的,我找不到官方文档,希望有知道的高手帮我解惑一下官方文档有无这些资讯。
感谢ytyubox大大的解答,已经在Documentation Archive内找到了:
https://ithelp.ithome.com.tw/upload/images/20201012/20129144lEbIhRV3l9.png


这次我打算实作一颗按钮而已,因为这个按钮会了,其他的东西也就都会了,我以Apple的按钮为例,当然这个按钮在实际上架中肯定会因为违反他们的人机介面指南而被挡下来的,所以只是示范用,直接上图:
https://ithelp.ithome.com.tw/upload/images/20201011/2012914427OhsBJAZY.png

其他功能在上一篇都讲过了,所以这次我打算讲渐层的功能,并且用StoryBoard来控制这些颜色跟是否启用渐层功能。

    @IBInspectable var 是否产生渐层: Bool = false
    @IBInspectable var 渐层开始颜色: UIColor = UIColor.black
    @IBInspectable var 渐层中间颜色: UIColor = UIColor.clear
    @IBInspectable var 渐层结束颜色: UIColor = UIColor.white

我宣告了四个属性,相信你们肯定看得懂的。


然後建立一个渐层图层,设定大小,并且设定颜色以及开始跟结束的位置:

func creatGradient()
    {
        if 是否产生渐层
        {
            let gradientLayer = CAGradientLayer()
            gradientLayer.frame = self.bounds
            gradientLayer.colors = [渐层开始颜色.cgColor ,渐层中间颜色.cgColor, 渐层结束颜色.cgColor]
            gradientLayer.startPoint = CGPoint(x: 0, y: 0)
            gradientLayer.endPoint = CGPoint(x: 1, y: 1)
            self.layer.insertSublayer(gradientLayer, at: 0)
        }
    }

这边有两点需要注意的:
1:如果没有设置开始跟结束的位置,则是预设从上到下的渐层模式
2:在设置颜色的时候,使用UIColor.cgColor属性,否则设置无效


creatGradient放在layoutSubviews()内,这边需要注意的是要记得呼叫super.layoutSubviews

override func layoutSubviews() {
        super.layoutSubviews()
        creatGradient()
    }

接下来可以到属性检阅器点选想要的属性设置了,需要注意到较旧版本的Xcode无法即时显示渐层功能,需要运行模拟器才看得到:
https://ithelp.ithome.com.tw/upload/images/20201011/20129144zO57ihKQG4.png

以上就完成了,另外在这次设置的过程中,发现一件算是有坑的事情,在这里面处理许久才发现为什麽,明天再跟大家分享。


<<:  Day27_渗透 Burp Suite-Intruder Positions

>>:  【Day26】Figma篇 : 从手机预览

ISO 27001 资讯安全管理系统 【解析】(二十四)

(二)风险分析 ISO 27005从一开始就强调不是方法论,此标准只是资讯安全风险管理指引,所以方法...

Day 02 - 行前说明 — 网页微切版架构 和 UI 元件

作为正式开始的第一篇要来讲的是很基础的网页切版和怎麽去看网页中有哪些元件,会分两部分: 网页微切版...

Leetcode: 210. Course Schedule II | 含C++笔记

Course Schedule I的延伸,这次要排出课程顺序。 思路 有大概想到去找node的顺序跟...

线上课程学习心得

铁人赛到今天终於30天了,最後就来分享一下自己在现在平台学习的感想以及选择课程内容的技巧吧 课程选择...

Day 2 : Odoo = 免费且完整的ERP + 完善的开发平台 + 第三方的免费Addon + 多人参与的商城

自我学习过程 5年前透过学校老师的介绍,重新再次认识及了解Odoo,印象中那时 Open ERP 己...