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

在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.

    }

}

时间: 2024-10-13 22:45:24

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

ios 继承UIView实现自定义视图——实现画图

主要的原理包括: 继承UIView ,重载drawrect和重载触摸事件 待实现的功能还有,路径数组保存等. 用可变数据保存path路径 画曲线是通过二次贝塞尔曲线实现的 这里可以得到画图的UIImage对象 UIGraphicsBeginImageContext(self.bounds.size); [self.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *result=UIGraphicsGetImageFrom

Java向上转型和向下转型(附具体样例)

                                            Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { public void eat() { System.out.println("父类的 eating..."); } } class Bird extends Animal { @Override publ

工程日记之HelloSlide(1):Swift自定义可视化组件的方法(继承UIView和在StoryBoard中设置)

需求描述 HelloSlide是把文本自动转化成幻灯片的软件,在幻灯片中我们有SmartArt:各种各样的几何形状,并且可以自定义大小和颜色,放在幻灯片不同的位置. 为了在我们的软件中实现类似的效果,我封装了一些自定义的组件,因为暂时只需要几何形状,我通过直接继承UIView来实现 代码 class ArcView:UIView{ var mystrokecolor:UIColor //设置笔触颜色 var color : UIColor //设置填充颜色 init(frame:CGRect,c

Swift - 反射(Reflection)的介绍与使用样例(附KVC介绍)

1,反射(Reflection) 对于C#.Java开发人员来说,肯定都对反射这个概念相当熟悉.所谓反射就是可以动态获取类型.成员信息,同时在运行时(而非编译时)可以动态调用任意方法.属性等行为的特性. 以Java上的两个知名框架(hibernate和spring)为例.hibernate的属性映射就是通过反射来赋值的,spring的bean的创建就是根据配置的class来反射构建的. 2,Objective-C 的 Runtime在使用ObjC开发时很少强调其反射概念,因为ObjC的Runti

Java 序列化Serializable具体解释(附具体样例)

1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描写叙述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 2.什么情况下须要序列化  a)当你想把的内存中的对象保存到一个文件里或者数据库中时候. b)当你想用套接字在网络上传送对象的时候: c)当你想通过RMI传输对象的时候. 3.怎样实现序列化 将须要序列化的类实现Serializable接口就能够了.Serializable接口中没有不论什么方法,能够理解为一个标记

继承UIView写自定义button

#import <UIKit/UIKit.h> @interface LPButton : UIView @property (nonatomic,strong) id target; @property (nonatomic,assign) SEL action; - (void)addTarget:(id)target action:(SEL)action; @end // // LPButton.m // loopdiner // // Created by yl on 15/12/8.

Java中23种设计模式(附代码样例)

一.设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式.结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式.其实还有两类:并发型模式和线程池模式 二.设计模式的六大原则1.开闭原则(Open Close Principle)开闭原则就是说对

Java线程演示样例 - 继承Thread类和实现Runnable接口

进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括多个进程. Java执行时环境就是一个单独的进程,在它内部还包括了作为进程的各种类和程序. 线程 能够将线程看做轻量级的进程. 线程存在于进程其中,须要的资源开销较小.同一进程中的线程共享进程的资源. Java多线程 每个Java引用都仅仅要有一个线程 - 主线程(main thread).尽管后台

#003 React 组件 继承 自定义的组件

主题:React组件 继承 自定义的 组件 一.需求说明 情况说明: 有A,B,C,D 四个组件,里面都有一些公用的逻辑,比如 设置数据,获取数据,有某些公用的的属性,不想在 每一个 组件里面写这些属性,怎么办? [和 面向对象的语言,C#,Java 的基类 思想是 一样的] 如果公用的东西,是一些方法,可以 使用 React 的 Mixins(ES5) ,高阶组件(ES6)[高阶函数不太了解,如何使用,去找下资料 ] 但是如果有公用的属性,那么就有点 力不从心了 在想,React 中,是否可用