mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Effect improvements
This commit is contained in:
@@ -0,0 +1,346 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
import Display
|
||||
import ComponentFlow
|
||||
|
||||
public class PassthroughLayer: CALayer {
|
||||
public var mirrorLayer: CALayer?
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
}
|
||||
|
||||
override init(layer: Any) {
|
||||
super.init(layer: layer)
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override public var position: CGPoint {
|
||||
get {
|
||||
return super.position
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.position = value
|
||||
}
|
||||
super.position = value
|
||||
}
|
||||
}
|
||||
|
||||
override public var bounds: CGRect {
|
||||
get {
|
||||
return super.bounds
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.bounds = value
|
||||
}
|
||||
super.bounds = value
|
||||
}
|
||||
}
|
||||
|
||||
override public var opacity: Float {
|
||||
get {
|
||||
return super.opacity
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.opacity = value
|
||||
}
|
||||
super.opacity = value
|
||||
}
|
||||
}
|
||||
|
||||
override public var sublayerTransform: CATransform3D {
|
||||
get {
|
||||
return super.sublayerTransform
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.sublayerTransform = value
|
||||
}
|
||||
super.sublayerTransform = value
|
||||
}
|
||||
}
|
||||
|
||||
override public var transform: CATransform3D {
|
||||
get {
|
||||
return super.transform
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.transform = value
|
||||
}
|
||||
super.transform = value
|
||||
}
|
||||
}
|
||||
|
||||
override public func add(_ animation: CAAnimation, forKey key: String?) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.add(animation, forKey: key)
|
||||
}
|
||||
|
||||
super.add(animation, forKey: key)
|
||||
}
|
||||
|
||||
override public func removeAllAnimations() {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.removeAllAnimations()
|
||||
}
|
||||
|
||||
super.removeAllAnimations()
|
||||
}
|
||||
|
||||
override public func removeAnimation(forKey: String) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.removeAnimation(forKey: forKey)
|
||||
}
|
||||
|
||||
super.removeAnimation(forKey: forKey)
|
||||
}
|
||||
}
|
||||
|
||||
open class PassthroughView: UIView {
|
||||
override public static var layerClass: AnyClass {
|
||||
return PassthroughLayer.self
|
||||
}
|
||||
|
||||
public let passthroughView: UIView
|
||||
|
||||
override public init(frame: CGRect) {
|
||||
self.passthroughView = UIView()
|
||||
|
||||
super.init(frame: frame)
|
||||
|
||||
(self.layer as? PassthroughLayer)?.mirrorLayer = self.passthroughView.layer
|
||||
}
|
||||
|
||||
required public init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
}
|
||||
|
||||
class PassthroughShapeLayer: CAShapeLayer {
|
||||
var mirrorLayer: CAShapeLayer?
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
}
|
||||
|
||||
override init(layer: Any) {
|
||||
super.init(layer: layer)
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override var position: CGPoint {
|
||||
get {
|
||||
return super.position
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.position = value
|
||||
}
|
||||
super.position = value
|
||||
}
|
||||
}
|
||||
|
||||
override var bounds: CGRect {
|
||||
get {
|
||||
return super.bounds
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.bounds = value
|
||||
}
|
||||
super.bounds = value
|
||||
}
|
||||
}
|
||||
|
||||
override var opacity: Float {
|
||||
get {
|
||||
return super.opacity
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.opacity = value
|
||||
}
|
||||
super.opacity = value
|
||||
}
|
||||
}
|
||||
|
||||
override var sublayerTransform: CATransform3D {
|
||||
get {
|
||||
return super.sublayerTransform
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.sublayerTransform = value
|
||||
}
|
||||
super.sublayerTransform = value
|
||||
}
|
||||
}
|
||||
|
||||
override var transform: CATransform3D {
|
||||
get {
|
||||
return super.transform
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.transform = value
|
||||
}
|
||||
super.transform = value
|
||||
}
|
||||
}
|
||||
|
||||
override var path: CGPath? {
|
||||
get {
|
||||
return super.path
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.path = value
|
||||
}
|
||||
super.path = value
|
||||
}
|
||||
}
|
||||
|
||||
override var fillColor: CGColor? {
|
||||
get {
|
||||
return super.fillColor
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.fillColor = value
|
||||
}
|
||||
super.fillColor = value
|
||||
}
|
||||
}
|
||||
|
||||
override var fillRule: CAShapeLayerFillRule {
|
||||
get {
|
||||
return super.fillRule
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.fillRule = value
|
||||
}
|
||||
super.fillRule = value
|
||||
}
|
||||
}
|
||||
|
||||
override var strokeColor: CGColor? {
|
||||
get {
|
||||
return super.strokeColor
|
||||
} set(value) {
|
||||
/*if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.strokeColor = value
|
||||
}*/
|
||||
super.strokeColor = value
|
||||
}
|
||||
}
|
||||
|
||||
override var strokeStart: CGFloat {
|
||||
get {
|
||||
return super.strokeStart
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.strokeStart = value
|
||||
}
|
||||
super.strokeStart = value
|
||||
}
|
||||
}
|
||||
|
||||
override var strokeEnd: CGFloat {
|
||||
get {
|
||||
return super.strokeEnd
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.strokeEnd = value
|
||||
}
|
||||
super.strokeEnd = value
|
||||
}
|
||||
}
|
||||
|
||||
override var lineWidth: CGFloat {
|
||||
get {
|
||||
return super.lineWidth
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.lineWidth = value
|
||||
}
|
||||
super.lineWidth = value
|
||||
}
|
||||
}
|
||||
|
||||
override var miterLimit: CGFloat {
|
||||
get {
|
||||
return super.miterLimit
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.miterLimit = value
|
||||
}
|
||||
super.miterLimit = value
|
||||
}
|
||||
}
|
||||
|
||||
override var lineCap: CAShapeLayerLineCap {
|
||||
get {
|
||||
return super.lineCap
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.lineCap = value
|
||||
}
|
||||
super.lineCap = value
|
||||
}
|
||||
}
|
||||
|
||||
override var lineJoin: CAShapeLayerLineJoin {
|
||||
get {
|
||||
return super.lineJoin
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.lineJoin = value
|
||||
}
|
||||
super.lineJoin = value
|
||||
}
|
||||
}
|
||||
|
||||
override var lineDashPhase: CGFloat {
|
||||
get {
|
||||
return super.lineDashPhase
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.lineDashPhase = value
|
||||
}
|
||||
super.lineDashPhase = value
|
||||
}
|
||||
}
|
||||
|
||||
override var lineDashPattern: [NSNumber]? {
|
||||
get {
|
||||
return super.lineDashPattern
|
||||
} set(value) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.lineDashPattern = value
|
||||
}
|
||||
super.lineDashPattern = value
|
||||
}
|
||||
}
|
||||
|
||||
override func add(_ animation: CAAnimation, forKey key: String?) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.add(animation, forKey: key)
|
||||
}
|
||||
|
||||
super.add(animation, forKey: key)
|
||||
}
|
||||
|
||||
override func removeAllAnimations() {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.removeAllAnimations()
|
||||
}
|
||||
|
||||
super.removeAllAnimations()
|
||||
}
|
||||
|
||||
override func removeAnimation(forKey: String) {
|
||||
if let mirrorLayer = self.mirrorLayer {
|
||||
mirrorLayer.removeAnimation(forKey: forKey)
|
||||
}
|
||||
|
||||
super.removeAnimation(forKey: forKey)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user