MetalEngine demo

This commit is contained in:
Ali
2023-11-10 23:04:47 +04:00
parent 3b9df3272a
commit c4782c7b32
8 changed files with 706 additions and 23 deletions

View File

@@ -1,19 +1,47 @@
import Foundation
import UIKit
import CallScreen
import MetalEngine
import Display
import DustEffect
public final class ViewController: UIViewController {
public final class ViewController: UIViewController {
private var dustLayer: DustEffectLayer?
override public func viewDidLoad() {
super.viewDidLoad()
let privateCallScreen = PrivateCallScreen(frame: CGRect())
self.view.addSubview(privateCallScreen)
self.view.layer.addSublayer(MetalEngine.shared.rootLayer)
MetalEngine.shared.rootLayer.frame = CGRect(origin: CGPoint(x: 0.0, y: -101.0), size: CGSize(width: 100.0, height: 100.0))
privateCallScreen.frame = self.view.bounds
privateCallScreen.update(size: self.view.bounds.size, insets: UIEdgeInsets(top: 44.0, left: 0.0, bottom: 0.0, right: 0.0))
self.reset()
let context = MetalContext.shared
self.view.layer.addSublayer(context.rootLayer)
context.rootLayer.frame = CGRect(origin: CGPoint(x: 0.0, y: -101.0), size: CGSize(width: 100.0, height: 100.0))
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.imageTap(_:))))
self.view.backgroundColor = .white
SharedDisplayLinkDriver.shared.updateForegroundState(true)
}
func reset() {
self.dustLayer?.removeFromSuperlayer()
let dustLayer = DustEffectLayer()
self.dustLayer = dustLayer
dustLayer.frame = self.view.bounds
self.view.layer.addSublayer(dustLayer)
}
@objc private func imageTap(_ recognizer: UITapGestureRecognizer) {
if case .ended = recognizer.state {
guard let dustLayer else {
return
}
let image = UIImage(named: "test")!
let itemSize = CGSize(width: 200.0, height: 200.0)
let itemFrame = CGRect(origin: CGPoint(x: floor((self.view.bounds.width - itemSize.width) * 0.5), y: floor((self.view.bounds.height - itemSize.height) * 0.5)), size: itemSize)
dustLayer.addItem(frame: itemFrame, image: image)
}
}
}