Skip to content

Commit 1ea7a76

Browse files
authored
Merge pull request #28 from temoki/multiple_tortoises
Draw with multiple tortoises
2 parents c9ef161 + e3a4363 commit 1ea7a76

File tree

39 files changed

+387
-93
lines changed

39 files changed

+387
-93
lines changed

OutputExamples/example1.gif

536 KB
Loading

OutputExamples/example1.png

111 KB
Loading

OutputExamples/example2.gif

1.28 MB
Loading

OutputExamples/example2.png

116 KB
Loading
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//: # With 2 tortoises 🐢🐢
2+
//: [👈 With a tortoise 🐢](@previous)
3+
import PlaygroundSupport
4+
import TortoiseGraphics
5+
import CoreGraphics
6+
7+
let canvas = PlaygroundCanvas(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
8+
canvas.frameRate = 30
9+
PlaygroundPage.current.liveView = canvas
10+
11+
canvas.drawingWithTortoises(count: 2) { tortoises in
12+
let 🐢 = tortoises[0]
13+
let 🐇 = tortoises[1]
14+
15+
🐢.penColor(.red)
16+
🐢.fillColor(.orange)
17+
🐢.left(90)
18+
19+
🐇.penColor(.purple)
20+
🐇.fillColor(.lightBlue)
21+
🐇.right(90)
22+
23+
// Turtle Star!
24+
🐢.beginFill()
25+
🐇.beginFill()
26+
🐢.repeat(36) {
27+
🐢.forward(120)
28+
🐇.forward(120)
29+
🐢.left(170)
30+
🐇.right(170)
31+
}
32+
🐢.endFill()
33+
🐇.endFill()
34+
}
35+

Playground/Playground.playground/Contents.swift renamed to Playground/Playground.playground/Pages/With a tortoise.xcplaygroundpage/Contents.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//: # With a tortoise 🐢
2+
//: [👉 With 2 tortoises 🐢🐢](@next)
13
import PlaygroundSupport
24
import TortoiseGraphics
35
import CoreGraphics
@@ -8,7 +10,7 @@ PlaygroundPage.current.liveView = canvas
810

911
canvas.drawing { 🐢 in
1012
🐢.penColor(.red)
11-
🐢.fillColor(.yellow)
13+
🐢.fillColor(.orange)
1214

1315
🐢.penUp()
1416
🐢.back(100)
-56.4 KB
Binary file not shown.
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<playground version='5.0' target-platform='macos'>
3-
<timeline fileName='timeline.xctimeline'/>
2+
<playground version='6.0' target-platform='macos' display-mode='raw'>
3+
<pages>
4+
<page name='With a tortoise'/>
5+
<page name='With 2 tortoises'/>
6+
</pages>
47
</playground>

Playground/PlaygroundCanvas.swift

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,41 @@ public class PlaygroundCanvas: View {
3030

3131
// MARK: - Canvas Protocol
3232

33-
public func drawing(_ block: @escaping (Tortoise) -> Void) {
34-
tortoise.initialize()
33+
public func drawing(drawingBlock: @escaping (Tortoise) -> Void) {
34+
tortoiseCharmer.initialize(tortoiseCount: 1)
3535

36-
tortoise.commandedHandler = { [weak self] (tortoise) in
36+
tortoiseCharmer.commandedHandler = { [weak self] (_) in
3737
guard !Thread.isMainThread else { return }
3838
guard let interval = self?.animationInterval else { return }
3939
Thread.sleep(forTimeInterval: interval)
4040
}
4141

4242
DispatchQueue.global().async { [weak self] in
43-
guard let tortoise = self?.tortoise else { return }
44-
block(tortoise)
45-
tortoise.commandedHandler = nil
43+
guard let tortoiseCharmer = self?.tortoiseCharmer else { return }
44+
drawingBlock(tortoiseCharmer.tortoises[0])
45+
tortoiseCharmer.commandedHandler = nil
46+
}
47+
}
48+
49+
public func drawingWithTortoises(count: Int, drawingBlock: @escaping ([Tortoise]) -> Void) {
50+
tortoiseCharmer.initialize(tortoiseCount: count)
51+
52+
tortoiseCharmer.commandedHandler = { [weak self] (_) in
53+
guard !Thread.isMainThread else { return }
54+
guard let interval = self?.animationInterval else { return }
55+
Thread.sleep(forTimeInterval: interval)
56+
}
57+
58+
DispatchQueue.global().async { [weak self] in
59+
guard let tortoiseCharmer = self?.tortoiseCharmer else { return }
60+
drawingBlock(tortoiseCharmer.tortoises)
61+
tortoiseCharmer.commandedHandler = nil
4662
}
4763
}
4864

4965
// MARK: - Private
5066

51-
private let tortoise: Tortoise = Tortoise()
67+
private var tortoiseCharmer = TortoiseCharmer(tortoiseCount: 1)
5268

5369
private var drawingFrameIndex: Int = 0
5470

@@ -59,7 +75,7 @@ public class PlaygroundCanvas: View {
5975
}
6076

6177
private func draw(with context: GraphicsContext) {
62-
drawingFrameIndex = tortoise.draw(with: context, toFrame: drawingFrameIndex)
78+
drawingFrameIndex = tortoiseCharmer.charm(with: context, toFrame: drawingFrameIndex)
6379
drawingTimer = Timer.scheduledTimer(timeInterval: animationInterval,
6480
target: self,
6581
selector: #selector(self.onAnimaitionTimer(timer:)),

PlaygroundBook/Tortoise.playground/Pages/TortoisePlayground.xcplaygroundpage/Contents.swift renamed to Playground/PlaygroundLiveViewController.swift

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
//#-hidden-code
1+
#if os(iOS)
22
import UIKit
3-
import PlaygroundSupport
43

5-
class PlaygroundLiveViewController: UIViewController {
4+
public class PlaygroundLiveViewController: UIViewController {
65

7-
var backView: UIView!
8-
var canvas: PlaygroundCanvas!
6+
private var backView: UIView!
7+
public var canvas: PlaygroundCanvas!
98

10-
override func viewDidLoad() {
9+
public override func viewDidLoad() {
1110
super.viewDidLoad()
12-
1311
view.translatesAutoresizingMaskIntoConstraints = false
1412

1513
backView = UIView(frame: view.bounds)
@@ -36,27 +34,4 @@ class PlaygroundLiveViewController: UIViewController {
3634
}
3735

3836
}
39-
let liveView = PlaygroundLiveViewController()
40-
PlaygroundPage.current.liveView = liveView
41-
42-
liveView.canvas.drawing { 🐢 in
43-
//#-code-completion(identifier, hide, Canvas, ImageCanvas, PlaygroundCanvas, View, Tortoise, PlaygroundLiveViewController, liveView, canvas)
44-
//#-code-completion(module, hide, UIKit, PlaygroundSupport)
45-
//#-end-hidden-code
46-
//: # Let's play with 🐢
47-
🐢.penColor(.red)
48-
🐢.fillColor(.yellow)
49-
50-
🐢.penUp()
51-
🐢.back(100)
52-
🐢.penDown()
53-
54-
// Turtle Star!
55-
🐢.beginFill()
56-
🐢.repeat(36) {
57-
🐢.forward(200)
58-
🐢.left(170)
59-
}
60-
🐢.endFill()
61-
//#-hidden-code
62-
}
37+
#endif

0 commit comments

Comments
 (0)