130 lines
4.0 KiB
Swift
130 lines
4.0 KiB
Swift
//
|
|
// SystemControllerSkinsViewController.swift
|
|
// Delta
|
|
//
|
|
// Created by Riley Testut on 9/30/16.
|
|
// Copyright © 2016 Riley Testut. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
import DeltaCore
|
|
|
|
extension SystemControllerSkinsViewController
|
|
{
|
|
private enum Section: Int
|
|
{
|
|
case portrait
|
|
case landscape
|
|
}
|
|
}
|
|
|
|
class SystemControllerSkinsViewController: UITableViewController
|
|
{
|
|
var system: System!
|
|
|
|
@IBOutlet private var portraitImageView: UIImageView!
|
|
@IBOutlet private var landscapeImageView: UIImageView!
|
|
|
|
private var _previousBoundsSize: CGSize?
|
|
}
|
|
|
|
extension SystemControllerSkinsViewController
|
|
{
|
|
override func viewDidLoad()
|
|
{
|
|
super.viewDidLoad()
|
|
|
|
self.title = self.system.localizedShortName
|
|
}
|
|
|
|
override func didReceiveMemoryWarning()
|
|
{
|
|
super.didReceiveMemoryWarning()
|
|
}
|
|
|
|
override func viewDidLayoutSubviews()
|
|
{
|
|
super.viewDidLayoutSubviews()
|
|
|
|
if self.view.bounds.size != self._previousBoundsSize
|
|
{
|
|
self.updateControllerSkins()
|
|
self.tableView.reloadData()
|
|
}
|
|
}
|
|
|
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
|
|
{
|
|
guard let cell = sender as? UITableViewCell, let indexPath = self.tableView.indexPath(for: cell), let window = self.view.window else { return }
|
|
|
|
let controllerSkinsViewController = segue.destination as! ControllerSkinsViewController
|
|
controllerSkinsViewController.system = self.system
|
|
|
|
var traits = DeltaCore.ControllerSkin.Traits.defaults(for: window)
|
|
|
|
let section = Section(rawValue: indexPath.section)!
|
|
switch section
|
|
{
|
|
case .portrait: traits.orientation = .portrait
|
|
case .landscape: traits.orientation = .landscape
|
|
}
|
|
|
|
controllerSkinsViewController.traits = traits
|
|
}
|
|
}
|
|
|
|
extension SystemControllerSkinsViewController
|
|
{
|
|
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
|
|
{
|
|
let section = Section(rawValue: indexPath.section)!
|
|
|
|
let imageSize: CGSize?
|
|
|
|
switch section
|
|
{
|
|
case .portrait: imageSize = self.portraitImageView.image?.size
|
|
case .landscape: imageSize = self.landscapeImageView.image?.size
|
|
}
|
|
|
|
guard let unwrappedImageSize = imageSize else { return super.tableView(tableView, heightForRowAt: indexPath) }
|
|
|
|
let scale = (self.view.bounds.width / unwrappedImageSize.width)
|
|
|
|
let height = min(unwrappedImageSize.height * scale, self.view.bounds.height - self.topLayoutGuide.length - self.bottomLayoutGuide.length - 30)
|
|
return height
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
|
|
{
|
|
guard let cell = tableView.cellForRow(at: indexPath) else { return }
|
|
|
|
self.performSegue(withIdentifier: "showControllerSkins", sender: cell)
|
|
}
|
|
}
|
|
|
|
private extension SystemControllerSkinsViewController
|
|
{
|
|
func updateControllerSkins()
|
|
{
|
|
guard let window = self.view.window else { return }
|
|
|
|
self._previousBoundsSize = self.view.bounds.size
|
|
|
|
let defaultTraits = DeltaCore.ControllerSkin.Traits.defaults(for: window)
|
|
|
|
var portraitTraits = defaultTraits
|
|
portraitTraits.orientation = .portrait
|
|
|
|
var landscapeTraits = defaultTraits
|
|
landscapeTraits.orientation = .landscape
|
|
|
|
let portraitControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: portraitTraits)
|
|
let landscapeControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: landscapeTraits)
|
|
|
|
self.portraitImageView.image = portraitControllerSkin?.image(for: portraitTraits, preferredSize: UIScreen.main.defaultControllerSkinSize)
|
|
self.landscapeImageView.image = landscapeControllerSkin?.image(for: landscapeTraits, preferredSize: UIScreen.main.defaultControllerSkinSize)
|
|
}
|
|
}
|