本文将演示如何通过金刚鹦鹉的类库,进行文字、图像、图表和图形的绘制。
首先确保已经安装了所需的第三方类库。双击查看安装配置文件【Podfile】
1 platform :ios, ‘9.0‘ 2 use_frameworks! 3 4 target ‘DemoApp‘ do 5 source ‘https://github.com/CocoaPods/Specs.git‘ 6 pod "Macaw" 7 end
根据配置文件中的相关设置,安装第三方类库。
安装完成之后,双击打开项目文件【DemoApp.xcodeproj】
在项目中引入等待绘制的图像,以及一份SVG矢量图形文件,
图形文件由坐标、路径等内容组成。通过第三方类库,将图形文件绘制在屏幕上。
依次创建几份继承自金刚鹦鹉视图的自定义类。
在项目文件夹上点击鼠标右键,弹出右键菜单。
【New File】->【Cocoa Touch】->【Next】->
【Class】:TextSVGView
【Subclass of】:MacawView
【Language】:Swift
->【Next】->【Create】
在当前的类文件中,创建一个用于绘制文本的视图。
1 import Foundation 2 //引入已经安装的第三方类库 3 import Macaw 4 5 class TextSVGView: MacawView 6 { 7 //添加一个初始化方法 8 required init?(coder aDecoder: NSCoder) 9 { 10 //创建一个文字节点,并设置文字的内容, 11 //以及文字节点的位置。 12 let text = Text(text: "Hello, SVG!", place: .move(dx: 60, dy: 100)) 13 //设置文字节点的字体属性 14 text.font = Font(name: "Arail", size: 42) 15 //实现父类的初始化方法, 16 super.init(node: text, coder: aDecoder) 17 } 18 }
在项目文件夹上点击鼠标右键,弹出右键菜单。
【New File】->【Cocoa Touch】->【Next】->
【Class】:ShapeSVGView
【Subclass of】:MacawView
【Language】:Swift
->【Next】->【Create】
在当前的类文件中,创建一个用于绘制图形的视图。
1 import UIKit 2 //引入已经安装的第三方类库 3 import Macaw 4 5 class ShapeSVGView: MacawView 6 { 7 //添加一个初始化方法 8 required init?(coder aDecoder: NSCoder) 9 { 10 //创建一个图形节点,并设置图形节点的显示区域、填充颜色、边框等属性。 11 let shape1 = Shape(form: Rect(x: 60, y: 75, w: 180, h: 180), 12 fill: Color(val: 0xfcc07c), 13 stroke: Stroke(fill: Color(val: 0xff9e4f), width: 6)) 14 15 //创建第二个图形节点,设置图形的圆角半径为16 16 let shape2 = Shape(form: RoundRect( 17 rect: Rect(x: 60, y: 275, w: 180, h: 180), 18 rx: 16)) 19 20 //设置一个文字节点,并设置文字节点的内容、字体、颜色、对齐方式、基线和位置等属性。 21 let text = Text( 22 text: "Show", 23 font: Font(name: "Serif", size: 21), 24 fill: Color.white, 25 align: .mid, 26 baseline: .mid, 27 place: .move(dx: 300 / 2, dy: 165)) 28 29 //从项目中读取一张图片素材,设置宽度为80,并设置图片在视图中的位置。 30 //然后给图片添加一个触摸事件,当触摸事件发生时,更改文字节点的字体颜色为褐色 31 let image = Image(src: "coffee.png", w: 80, place: .move(dx: 110, dy: 320)) 32 _ = image.onTap { (tapEvent) in 33 text.fill = Color.maroon 34 let location = tapEvent.location.toCG() 35 if let currentNode = svgView.findNodeAt(location: location) { 36 print(currentNode.tag.first ?? "tag not found") 37 } 38 } 39 //初始化一个组节点 40 let group = Group() 41 //将上文创建的四个节点,添加到组中。 42 group.contents = [shape1, shape2, text, image] 43 //实现父类的初始化方法 44 super.init(node: group, coder: aDecoder) 45 } 46 }
在项目文件夹上点击鼠标右键,弹出右键菜单。
【New File】->【Cocoa Touch】->【Next】->
【Class】:MyChartView
【Subclass of】:MacawView
【Language】:Swift
->【Next】->【Create】
在当前的类文件中,创建一个用于绘制柱形图表的视图。
1 import UIKit 2 //引入已经安装的第三方类库 3 import Macaw 4 5 class MyChartView: MacawView 6 { 7 //初始化一个由数字组成的数组,作为图表的数据源。 8 static let data: [Double] = [101, 142, 66, 178, 92] 9 //初始化一个颜色数组,作为柱形的填充颜色 10 static let palette = [0xf08c00, 0xbf1a04, 0xffd505, 0x8fcc16, 0xd1aae3].map { val in Color(val: val)} 11 12 //添加一个初始化方法 13 required init?(coder aDecoder: NSCoder) 14 { 15 //通过调用自定义方法,创建一个按钮节点。 16 //该按钮节点将被附加在图表上。 17 let button = MyChartView.createButton() 18 //通过调用自定义方法,创建一个图表对象。 19 let chart = MyChartView.createChart(button.contents[0]) 20 //实现父类的初始化方法。 21 super.init(node: Group(contents: [button, chart]), coder: aDecoder) 22 } 23 24 //添加一个自定义方法,用来创建一个附加在图表上的按钮节点,该按钮包含一个图标。 25 private static func createButton() -> Group 26 { 27 //初始化一个图形节点, 并设置它的颜色显示和填充颜色, 28 let shape = Shape( 29 form: Rect(x: -100, y: -15, w: 200, h: 30).round(r: 5), 30 //填充颜色是一个角度为90度的渐变色。 31 fill: LinearGradient(degree: 90, from: Color(val: 0xfcc07c), to: Color(val: 0xfc7600)), 32 //设置图形节点的边框颜色和边框的宽度 33 stroke: Stroke(fill: Color(val: 0xff9e4f), width: 1)) 34 35 //初始化一个文字节点,并设置文字内容、字体、颜色、对齐方式、基线、位置和不透明度等属性。 36 let text = Text( 37 text: "Show", font: Font(name: "Serif", size: 21), 38 fill: Color.white, align: .mid, baseline: .mid, 39 place: .move(dx: 15, dy: 0), opaque: false) 40 41 //从项目中读取一张图片素材,以创建一个图像节点,作为按钮上的图标。 42 let image = Image(src: "charts.png", w: 30, place: .move(dx: -40, dy: -15), opaque: false) 43 44 //最后返回一个包含三个节点的组 45 return Group(contents: [shape, text, image], place: .move(dx: 375 / 2, dy: 75)) 46 } 47 48 //添加另一个方法,用来绘制一张图表。 49 private static func createChart(_ button: Node) -> Group 50 { 51 //初始化一个节点数组。 52 var items: [Node] = [] 53 54 //添加一个6次的循环语句,用来创建六个y轴虚线。 55 for i in 1...6 56 { 57 //计算每条虚线的y轴坐标 58 let y = 200 - Double(i) * 30.0 59 //绘制一个线条,并设置线条的描边颜色。 60 items.append(Line(x1: -5, y1: y, x2: 275, y2: y).stroke(fill: Color(val: 0xF0F0F0))) 61 //在线条的左侧绘制y轴的数值标签。 62 items.append(Text(text: "\(i*30)", align: .max, baseline: .mid, place: .move(dx: -10, dy: y))) 63 } 64 65 //通过自定义方法,绘制柱形节点,并将柱形节点添加到图表中。 66 items.append(createBars(button)) 67 //绘制一个线条节点,作为图表的x轴。 68 items.append(Line(x1: 0, y1: 200, x2: 275, y2: 200).stroke()) 69 //绘制图表的y轴 70 items.append(Line(x1: 0, y1: 0, x2: 0, y2: 200).stroke()) 71 72 //返回一个包含各节点的数组对象。 73 return Group(contents: items, place: .move(dx: 50, dy: 200)) 74 } 75 76 //添加一个方法,用来绘制柱状图形。 77 private static func createBars(_ button: Node) -> Group 78 { 79 //初始化一个节点数组 80 var items: [Node] = [] 81 //对图表的数据源数组进行遍历 82 for (i, item) in data.enumerated() 83 { 84 //在循环语句中,创建在水平方向上不同位置的矩形节点,节点的高度为数组中的数据。 85 let bar = Shape( 86 form: Rect(x: Double(i) * 50 + 25, y: 0, w: 30, h: item), 87 fill: LinearGradient(degree: 90, from: palette[i], to: palette[i].with(a: 0.3)), 88 place: .move(dx: 0, dy: -data[i])) 89 //将矩形节点添加到数组中 90 items.append(bar) 91 } 92 93 //返回由5个矩形节点组成的组。 94 return Group(contents: items, place: .move(dx: 0, dy: 200)) 95 } 96 }
在项目文件夹上点击鼠标右键,弹出右键菜单。
【New File】->【Cocoa Touch】->【Next】->
【Class】:SVGView
【Subclass of】:MacawView
【Language】:Swift
->【Next】->【Create】
在当前的类文件中,创建一个用于绘制SVG图形的视图。
1 import UIKit 2 //引入已经安装的第三方类库 3 import Macaw 4 5 class SVGView: MacawView 6 { 7 //添加一个初始化方法 8 required init?(coder aDecoder: NSCoder) 9 { 10 //在初始化方法中,通过第三方类库的解析方法,加载并解析项目中的指定名称的图形文件。 11 super.init(node: try! SVGParser.parse(resource: "tiger"), coder: aDecoder) 12 } 13 }
进入项目的故事板界面【Main.storyboard】
点击控件库图标,打开控件库的列表窗口。
在视图控件的上方双击,往故事板中插入一个视图。
点击属性检查器图标,进入属性设置面板。
依次设置视图对象的坐标和尺寸。
X:0 Y:0
Width:320 Height:568
点击身份检查器图标,进入身份设置面板。
在类名输入框内,输入自定义的类名,
首先输入用于绘制文字的自定义类。
【Class】:TextSVGView
接着输入用于绘制图形的自定义类,
使故事板中的视图控件,显示自定义的图形。
【Class】:ShapeSVGView
接着输入用于绘制图表的自定义类,
使故事板中的视图控件,显示自定义的图表。
【Class】:MyChartView
接着输入用于绘制SVG(矢量图形)的自定义类,
【Class】:SVGView
原文地址:https://www.cnblogs.com/strengthen/p/10354504.html