Attempting to make iOS work

This commit is contained in:
Eryn Wells 2018-10-09 09:28:31 -07:00
parent fc0a567112
commit 0844fbc010
3 changed files with 110 additions and 7 deletions

View file

@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@ -9,8 +12,8 @@
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="Metaballs" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC" customClass="MTKView">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>

View file

@ -9,12 +9,88 @@
import UIKit
class ViewController: UIViewController {
private static func defaultParameters() -> Parameters {
var p = Parameters()
let defaults = UserDefaults.standard
let style = defaults.colorStyle ?? .gradient2Horizontal
p.colorStyle = style
let color0 = defaults.color0 ?? Float4(0.50, 0.79, 1, 1)
p.color0 = color0
let color1 = defaults.color1 ?? Float4(0.88, 0.50, 1, 1)
p.color1 = color1
return p
}
internal var field: Field {
didSet {
field.size = Size(size: metalView.drawableSize)
}
}
private var renderer: Renderer!
internal var metalView: MTKView {
return self.view as! MTKView
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
let params = ViewController.defaultParameters()
field = Field(parameters: params)
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder: NSCoder) {
let params = ViewController.defaultParameters()
field = Field(parameters: params)
super.init(coder: coder)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
do {
renderer = try Renderer(delegate: self)
} catch let e {
print("\(e)")
view = newErrorView()
return
}
metalView.delegate = renderer
}
override func viewWillAppear() {
super.viewWillAppear()
renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize)
for _ in 1...10 {
addBallWithRandomRadius()
}
}
// MARK: - Private
private func newErrorView() -> NSView {
let view = NSView()
view.layer?.backgroundColor = NSColor.red.cgColor
return view
}
private func addBallWithRandomRadius() {
let base = UInt32(view.bounds.width * 0.05)
let variance = UInt32(base * 2)
let r = Float(base + arc4random_uniform(variance))
field.add(ballWithRadius: r)
}
// MARK: - RendererDelegate
var renderSize: Size {
get {
return field.size
}
set {
field.size = newValue
}
}
}