在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现。下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举、协议等相关知识的学习。

效果图如下:
组件代码:ScoreView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import UIKit
enum ScoreType{
    case Common  //普通分数面板
    case Best    //最高分面板
}
protocol ScoreViewProtocol{
     
    func changeScore(value s:Int)
}
class ScoreView:UIView, ScoreViewProtocol
{
    var label:UILabel!
     
    let defaultFrame = CGRectMake(0,0,100,30)
    var stype:String //显示”最高分“还是”分数“
    var score:Int = 0{
        didSet{
            //分数变化,标签内容也要变化
            label.text = "\(stype):\(score)"
        }
    }
     
    //传入分数面板的类型,用于控制标签的显示
    init(stype:ScoreType)
    {
        label = UILabel(frame:defaultFrame)
        label.textAlignment = NSTextAlignment.Center
         
        super.init(frame:defaultFrame)
         
        self.stype = (stype == ScoreType.Common ? "分数":"最高分")
         
        backgroundColor = UIColor.orangeColor()
        label.font = UIFont(name:"微软雅黑", size:16)
        label.textColor = UIColor.whiteColor()
        self.addSubview(label)
    }
     
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
     
    //实现协议中的方法
    func changeScore(value s:Int)
    {
        score = s
    }
}

组件使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import UIKit
class ViewController: UIViewController {
     
    var score:ScoreView!
    var bestscore:ScoreView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        setupScoreLabels();
    }
     
    func setupScoreLabels()
    {
        score = ScoreView(stype: ScoreType.Common)
        score.frame.origin = CGPointMake(50, 80)
        score.changeScore(value: 0)
        self.view.addSubview(score)
         
         
        bestscore = ScoreView(stype: ScoreType.Best)
        bestscore.frame.origin.x = 170
        bestscore.frame.origin.y = 80
        bestscore.changeScore(value: 99)
        self.view.addSubview(bestscore)
         
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

转载于:https://www.cnblogs.com/Free-Thinker/p/4838391.html

Swift - 继承UIView实现自定义可视化组件(附记分牌样例)相关推荐

  1. 已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为“名”+空格+“姓”;并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写。(后附详细样例说明)

    已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为"名"+空格+"姓":并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写.(后附 ...

  2. java 泛型向下转型_Java向上转型和向下转型(附具体样例)

    Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { pu ...

  3. flex 自定义可视化组件的超级鸡肋的属性设置

    虽然前段时间以乔布斯为首的几位大侠对 flash 的安全.性能等进行了强烈的批评,而且伴随着 html5 的日趋完善,可能这种批评声会越来越大,甚或超过南非世界杯呜呜组啦的分贝,但是个人认为 flex ...

  4. C语言 数据结构 图的邻接矩阵存储 基本操作(附输入样例和讲解)

    代码参照了严蔚敏.吴伟民编写的数据结构(C语言版). 部分内容参考了这位大佬: https://blog.csdn.net/jeffleo/article/details/53326648 所有代码采 ...

  5. 父子进程管道通信(附简单样例)

    0x00思路 为了给TinyHTTPd源码分析打下基础,先写一个简单父子进程管道通信的样例 1,先定义,并绑定read,write函数和缓冲区,创建pipe管道数组(下标0对于读段,1对应写端,这是强 ...

  6. C语言必知-指针数组(附程序样例和详解)

    指针数组 除了类型之外,指针变量和其他的变量很相似,只不过加上指针标识就行 例如int *api[10],由于下标引用的优先级高于间接访问(就是解引用),因此 api是一个数组,数组中的元素的类型就是 ...

  7. 可视化大屏原型图解决方案附axure可视化组件库

    现在越来越多的数据展示方式采用了可视化大屏的策略,对数据项进行图表或者动态的展示.在没有产品原型的情况下,怎么制作一个简易的原型呢? 这里提供三种方式制作简易demo: 第一种:原生html+js实现 ...

  8. 辅助图分析人员的自定义图数据可视化组件

    图数据处理与可视化 一.可视化效果 二.neo4j的数据封装 三.将封装好的数据转换为d3.js格式并写入文件 四.启动http服务加载文件数据 五.使用HTML可视化图数据 在图数据处理过程中,如果 ...

  9. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  10. Unity自定义UI组件(十一) 雷达图、属性图

    前言 借用梦想世界宠物属性图 想必大家都在游戏中见过属性图用于展示多种属性的数值,可以较为直观的对比某种属性的缺陷或者是哪种属性有优势.在三维可视化领域也会遇到类似的属性对比,用属性图来展示最为合适. ...

最新文章

  1. 真正厉害的 AI,从来不走「捷径」
  2. php中单引号和双引号的区别,哪个速度更快?为什么?
  3. python 依据某几列累加求和_Python爬虫笔记:爬取单个页面
  4. Oracle原理:11g中的网络配置
  5. c语言中tgx是什么函数,《高等数学》课后练习题
  6. php屏幕共享功能,利用无线投屏技术同屏直播,精彩随时共享
  7. cisco 2960-24 配置(生产环境)
  8. js浏览器对象模型(BOM)
  9. nginx html解析插件,nginx配置信息的解析流程
  10. 黄聪:【强烈推荐】搜索引擎排名决定一切吗!
  11. Spring : Spring 深入理解lombok
  12. mysql性能优化总结详解:MySQL数据库从原理到高性能实战
  13. VSS2005的安装与配置
  14. android 修改 dpi_努比亚 Z11|魔趣100|安卓10.0|归属地|机型修改|性能调整|稳定流畅...
  15. SCSI硬盘系统无法启动取数据办法
  16. 实时网速怎么看快慢_iQOO怎么显示网速 网络状态实时查看
  17. 敏捷模式下携程的接口自动化平台演变
  18. composer安装fxp/composer-asset-plugin
  19. Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
  20. 使用批处理进行简单U盘杀毒 - TEST

热门文章

  1. 安装卸载gitlab
  2. 深度学习常用的数据集,包括各种数据跟图像数据
  3. [译] A Neural Algorithm of Artistic Style--图片风格化
  4. 不同的核函数对支持向量机分类性能的影响
  5. yolov5s 目标检测模型实战——火点烟雾检测实战
  6. python绘制风向玫瑰图和污染物玫瑰图
  7. Jaccard相似度和广义Jaccard相似度
  8. 海域网域名解析服务器,域名系统dns实现的映射是
  9. FISCO BCOS 区块链交易流程 区块
  10. Kubernetes 小白学习笔记(1)--基本概念1