Created
March 8, 2016 23:34
-
-
Save jkosoy/845f8a9a72c3c4bb5ebd to your computer and use it in GitHub Desktop.
Revisions
-
jkosoy created this gist
Mar 8, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,129 @@ // // IntroView.swift // Fare Weather // // Created by Jamie Kosoy on 3/8/16. // Copyright © 2016 Arbitrary. All rights reserved. // import UIKit import CFAAction import PromiseKit final class IntroView : UIView { let fareLabel = UILabel() let weatherLabel = UILabel() let warmerSide = UIView() let warmerSideMaskView = UIView() override func willMoveToSuperview(newSuperview: UIView?) { if let _ = newSuperview { initFareLabel() initWarmerSide() initWarmerSideMaskView() initWeatherLabel() addSubview(fareLabel) addSubview(warmerSide) warmerSideMaskView.addSubview(weatherLabel) addSubview(warmerSideMaskView) } } // MARK: Title private func initFareLabel() { let font = UIFont.appFontOfSize(36) fareLabel.text = "fare" fareLabel.font = font fareLabel.textColor = UIColor.whiteColor() fareLabel.sizeToFit() fareLabel.frame.origin = CGPoint(x: 0, y: 211) fareLabel.center.x = center.x addSubview(fareLabel) } private func initWeatherLabel() { let font = UIFont.appFontOfSize(36) weatherLabel.text = "weather" weatherLabel.font = font weatherLabel.textColor = UIColor.whiteColor() weatherLabel.sizeToFit() weatherLabel.frame.origin = CGPoint(x: 0, y: fareLabel.frame.origin.y + 19) weatherLabel.center.x = (frame.size.width - weatherLabel.frame.size.width) + 12 warmerSideMaskView.addSubview(weatherLabel) } private func animateFareLabelIn() -> Promise<Void> { return Promise { fulfill, reject in let toPoint = fareLabel.center let fromPoint = CGPoint(x: fareLabel.center.x + 100, y: fareLabel.center.y) fareLabel.center = fromPoint let slide = CFAAction.move(fromPoint: fromPoint, toPoint: toPoint, time: 1.0, easingFunction: ExponentialEaseInOut) fareLabel.layer.runAction(slide) { fulfill() } } } private func animateWeatherLabelIn() -> Promise<Void> { return Promise { fulfill, reject in let toPoint = weatherLabel.center let fromPoint = CGPoint(x: weatherLabel.center.x - weatherLabel.frame.size.width, y: weatherLabel.center.y) weatherLabel.center = fromPoint let slide = CFAAction.move(fromPoint: fromPoint, toPoint: toPoint, time: 1.0, easingFunction: ExponentialEaseInOut) weatherLabel.layer.runAction(CFAAction.group([CFAAction.waitForDuration(0.33), slide])) { fulfill() } } } // MARK: "Warmer" Side private func initWarmerSide() { let l = warmerSideLayer() l.backgroundColor = UIColor.appRedColor().CGColor warmerSide.layer.addSublayer(l) addSubview(warmerSide) } private func initWarmerSideMaskView() { let maskLayer = warmerSideLayer() maskLayer.backgroundColor = UIColor.blackColor().CGColor warmerSideMaskView.layer.mask = maskLayer addSubview(warmerSideMaskView) } private func warmerSideLayer() -> CALayer { let warmLayer = CALayer() warmLayer.frame = CGRect(origin: CGPointZero, size: CGSize(width: frame.size.width, height: frame.size.height * 1.5)) warmLayer.position.x = frame.size.width + (frame.size.width / 2) - center.x warmLayer.position.y = center.y warmLayer.setValue(CGFloat(21).degreesToRadians, forKeyPath: "transform.rotation.z") return warmLayer } // MARK: Animation func animateIn() -> Promise<Void> { return Promise { fulfill, reject in when([ animateFareLabelIn(), animateWeatherLabelIn() ]).then { _ -> Void in fulfill() } } } }