Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Chapter 8 of the Cosmos Tutorial
// Copyright © 2016 C4
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: The above copyright
// notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
import UIKit
public class InfoPanel : CanvasController {
//MARK: -
//MARK: Properties
var link : TextShape?
//MARK: -
//MARK: Setup
public override func setup() {
//makes the background slightly dark
canvas.backgroundColor = Color(red: 0, green: 0, blue: 0, alpha: 0.33)
//hides the info panel
canvas.opacity = 0.0
//creates the logo
createLogo()
//creates the label
createLabel()
//creates the link
createLink()
//creates a gesture to open the C4 site
linkGesture()
//creates a gesture to hide the panel
hideGesture()
}
//MARK: -
//MARK: Logo
func createLogo() {
//creates an image and positions it before adding it to the screen
let logo = Image("logo")!
logo.center = Point(canvas.center.x,canvas.height/6.0)
canvas.add(logo)
}
//MARK: -
//MARK: Label
func createLabel() {
//creates the message to be displayed in the label
let message = "COSMOS is a lovingly\nbuilt app created\nby the C4 team.\n\n\nWe hope you enjoy\ncruising the COSMOS.\n\n\nYou can learn how\nto build this app\n on our site at:"
//creates a label and styles / positions it before adding it to the screen
//uses a UILabel because we want to have multiple lines of text
let text = UILabel()
text.font = UIFont(name: "Menlo-Regular", size: 18)
text.numberOfLines = 40
text.text = message
text.textColor = .whiteColor()
text.textAlignment = .Center
text.sizeToFit()
text.center = CGPoint(canvas.center)
canvas.add(text)
}
//MARK: -
//MARK: Link
func createLink() {
//creates a textshape
let f = Font(name: "Menlo-Regular", size: 24)!
let text = TextShape(text:"www.c4ios.com", font: f)!
text.fillColor = white
text.center = Point(canvas.center.x,canvas.height * 5.0/6.0)
//creates the pink line under the text shape
let a = Point(text.origin.x,text.frame.max.y+8)
let b = Point(a.x + text.width + 1, a.y)
let line = Line((a,b))
line.lineWidth = 2.0
line.strokeColor = C4Pink
//associates the link variable with the text
link = text
//adds both elements to the screen
canvas.add(link)
canvas.add(line)
}
//MARK: -
//MARK: Gesture
func linkGesture() {
//creates a press gesture
let press = link?.addLongPressGestureRecognizer { locations, center, state in
switch state {
case .Began, .Changed:
//if the press starts, or the user is dragging, make sure the text color is pink
self.link?.fillColor = C4Pink
case .Ended:
//if the user chooses to release the gesture, test to see if their location is over the link shape
if let l = self.link where l.hitTest(center) {
//if so, open the link in safari
UIApplication.sharedApplication().openURL(NSURL(string:"http://www.c4ios.com/cosmos/")!)
}
fallthrough
default:
//set the text color back to white
self.link?.fillColor = white
}
}
press?.minimumPressDuration = 0.0
}
func hideGesture() {
canvas.addTapGestureRecognizer { locations, center, state in
self.hide()
}
}
//MARK: -
//MARK: Animations
func hide() {
ViewAnimation(duration: 0.25) { () -> Void in
self.canvas.opacity = 0.0
}.animate()
}
func show() {
ViewAnimation(duration: 0.25) { () -> Void in
self.canvas.opacity = 1.0
}.animate()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment