Skip to content

Instantly share code, notes, and snippets.

@amosgyamfi
Last active February 14, 2022 10:59
Show Gist options
  • Save amosgyamfi/4d2e475aa47b00ef4be0df0aa19dbb1e to your computer and use it in GitHub Desktop.
Save amosgyamfi/4d2e475aa47b00ef4be0df0aa19dbb1e to your computer and use it in GitHub Desktop.
//
// ScreenView.swift
// Exported from Kite Compositor for Mac 2.1
//
// Created on 14.2.2022, 12.57.
//
import UIKit
class ScreenView: UIView
{
// MARK: - Initialization
init()
{
super.init(frame: CGRect(x: 0, y: 0, width: 375, height: 812))
self.setupLayers()
}
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.setupLayers()
}
// MARK: - Setup Layers
private func setupLayers()
{
// Images
//
guard let happyValentinePngImage = UIImage(named: "happyValentine.png") else {
fatalError("Warning: Unable to locate image named 'happyValentine.png'")
}
guard let iPhoneXTiffImage = UIImage(named: "iPhoneX.tiff") else {
fatalError("Warning: Unable to locate image named 'iPhoneX.tiff'")
}
// Colors
//
let backgroundColor = UIColor(red: 0, green: 0.372549, blue: 1, alpha: 1)
let borderColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0)
let backgroundColor1 = UIColor(red: 0.0365, green: 0.274891, blue: 0.73, alpha: 0)
let borderColor1 = UIColor(red: 0.0465, green: 0.350203, blue: 0.93, alpha: 0)
let color = UIColor(red: 1, green: 0.149131, blue: 0, alpha: 0)
// Screen
//
let screenLayer = CALayer()
screenLayer.name = "Screen"
screenLayer.bounds = CGRect(x: 0, y: 0, width: 375, height: 812)
screenLayer.position = CGPoint(x: 0, y: 0)
screenLayer.anchorPoint = CGPoint(x: 0, y: 0)
screenLayer.contentsGravity = .center
screenLayer.masksToBounds = true
screenLayer.backgroundColor = backgroundColor.cgColor
screenLayer.borderColor = borderColor.cgColor
screenLayer.shadowOffset = CGSize(width: 0, height: 1)
screenLayer.allowsEdgeAntialiasing = true
screenLayer.allowsGroupOpacity = true
screenLayer.fillMode = .forwards
// Screen Sublayers
//
// Valentine
//
let valentineLayer = CAEmitterLayer()
valentineLayer.name = "Valentine"
valentineLayer.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
valentineLayer.position = CGPoint(x: 187, y: 740)
valentineLayer.contentsGravity = .center
valentineLayer.backgroundColor = backgroundColor1.cgColor
valentineLayer.borderWidth = 1
valentineLayer.borderColor = borderColor1.cgColor
valentineLayer.shadowOffset = CGSize(width: 0, height: 1)
valentineLayer.allowsEdgeAntialiasing = true
valentineLayer.allowsGroupOpacity = true
valentineLayer.fillMode = .forwards
valentineLayer.emitterShape = .cuboid
valentineLayer.emitterPosition = CGPoint(x: 50, y: 50)
valentineLayer.emitterSize = CGSize(width: 100, height: 100)
valentineLayer.renderMode = .backToFront
valentineLayer.seed = 0
// Emitter Cell
//
let emitterCellEmitterCell = CAEmitterCell()
emitterCellEmitterCell.name = "Emitter Cell"
emitterCellEmitterCell.contents = happyValentinePngImage.cgImage
emitterCellEmitterCell.contentsScale = 1.8
emitterCellEmitterCell.color = color.cgColor
emitterCellEmitterCell.scale = 0.11
emitterCellEmitterCell.scaleRange = 0.2
emitterCellEmitterCell.scaleSpeed = 0.03
emitterCellEmitterCell.magnificationFilter = CALayerContentsFilter.nearest.rawValue
emitterCellEmitterCell.minificationFilter = CALayerContentsFilter.nearest.rawValue
emitterCellEmitterCell.spin = 0.1
emitterCellEmitterCell.spinRange = 0.1
emitterCellEmitterCell.velocity = 100
emitterCellEmitterCell.velocityRange = 8
emitterCellEmitterCell.xAcceleration = 2.2
emitterCellEmitterCell.yAcceleration = -200
emitterCellEmitterCell.zAcceleration = 100
emitterCellEmitterCell.emissionRange = 6.284
emitterCellEmitterCell.birthRate = 5
emitterCellEmitterCell.lifetime = 10
emitterCellEmitterCell.lifetimeRange = 4
emitterCellEmitterCell.redRange = 0.3
emitterCellEmitterCell.redSpeed = 0.5
emitterCellEmitterCell.greenRange = 0.3
emitterCellEmitterCell.greenSpeed = 0.5
emitterCellEmitterCell.blueRange = 0.3
emitterCellEmitterCell.blueSpeed = 0.5
emitterCellEmitterCell.alphaRange = 0.9
emitterCellEmitterCell.alphaSpeed = 1
emitterCellEmitterCell.fillMode = .forwards
valentineLayer.emitterCells = [ emitterCellEmitterCell ]
screenLayer.addSublayer(valentineLayer)
self.layer.addSublayer(screenLayer)
// iPhoneX
//
let iPhoneXLayer = CALayer()
iPhoneXLayer.name = "iPhoneX"
iPhoneXLayer.bounds = CGRect(x: 0, y: 0, width: 423, height: 850)
iPhoneXLayer.position = CGPoint(x: -24, y: -19)
iPhoneXLayer.anchorPoint = CGPoint(x: 0, y: 0)
iPhoneXLayer.contents = iPhoneXTiffImage.cgImage
iPhoneXLayer.contentsGravity = .resizeAspect
iPhoneXLayer.contentsScale = 2
iPhoneXLayer.shadowOffset = CGSize(width: 0, height: 1)
iPhoneXLayer.magnificationFilter = .nearest
iPhoneXLayer.allowsEdgeAntialiasing = true
iPhoneXLayer.allowsGroupOpacity = true
iPhoneXLayer.fillMode = .forwards
self.layer.addSublayer(iPhoneXLayer)
}
// MARK: - Responder
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
{
guard let location = touches.first?.location(in: self.superview),
let hitLayer = self.layer.presentation()?.hitTest(location) else { return }
print("Layer \(hitLayer.name ?? String(describing: hitLayer)) was tapped.")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment