mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
 | 
						|
extension UIView {
 | 
						|
 | 
						|
    struct CircularGlowConfiguration {
 | 
						|
        let size: CGFloat
 | 
						|
        let color: UIColor
 | 
						|
        let isAnimated: Bool
 | 
						|
        let animationDuration: TimeInterval
 | 
						|
        let offset: CGSize
 | 
						|
        let opacity: Float
 | 
						|
        let radius: CGFloat
 | 
						|
 | 
						|
        init(size: CGFloat, color: UIColor, isAnimated: Bool = false, animationDuration: TimeInterval = 0.25, offset: CGSize = CGSize(width: 0, height: 0.8), opacity: Float = isLightMode ? 0.4 : 1, radius: CGFloat) {
 | 
						|
            self.size = size
 | 
						|
            self.color = color
 | 
						|
            self.isAnimated = isAnimated
 | 
						|
            self.animationDuration = animationDuration
 | 
						|
            self.offset = offset
 | 
						|
            self.opacity = opacity
 | 
						|
            self.radius = radius
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    func setCircularGlow(with configuration: CircularGlowConfiguration) {
 | 
						|
        let newSize = configuration.size
 | 
						|
        let newPath = UIBezierPath(ovalIn: CGRect(origin: CGPoint.zero, size: CGSize(width: newSize, height: newSize))).cgPath
 | 
						|
        if configuration.isAnimated {
 | 
						|
            let pathAnimation = CABasicAnimation(keyPath: "shadowPath")
 | 
						|
            pathAnimation.fromValue = layer.shadowPath
 | 
						|
            pathAnimation.toValue = newPath
 | 
						|
            pathAnimation.duration = configuration.animationDuration
 | 
						|
            layer.add(pathAnimation, forKey: pathAnimation.keyPath)
 | 
						|
        }
 | 
						|
        layer.shadowPath = newPath
 | 
						|
        let newColor = configuration.color.cgColor
 | 
						|
        if configuration.isAnimated {
 | 
						|
            let colorAnimation = CABasicAnimation(keyPath: "shadowColor")
 | 
						|
            colorAnimation.fromValue = layer.shadowColor
 | 
						|
            colorAnimation.toValue = newColor
 | 
						|
            colorAnimation.duration = configuration.animationDuration
 | 
						|
            layer.add(colorAnimation, forKey: colorAnimation.keyPath)
 | 
						|
        }
 | 
						|
        layer.shadowColor = newColor
 | 
						|
        layer.shadowOffset = configuration.offset
 | 
						|
        layer.shadowOpacity = configuration.opacity
 | 
						|
        layer.shadowRadius = configuration.radius
 | 
						|
    }
 | 
						|
}
 |