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
		
	
| 
											6 years ago
										 | 
 | ||
|  | extension UIView { | ||
|  | 
 | ||
|  |     struct CircularGlowConfiguration { | ||
|  |         let size: CGFloat | ||
|  |         let color: UIColor | ||
|  |         let isAnimated: Bool | ||
| 
											5 years ago
										 |         let animationDuration: TimeInterval | ||
| 
											6 years ago
										 |         let offset: CGSize | ||
|  |         let opacity: Float | ||
|  |         let radius: CGFloat | ||
|  | 
 | ||
| 
											5 years ago
										 |         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) { | ||
| 
											6 years ago
										 |             self.size = size | ||
|  |             self.color = color | ||
|  |             self.isAnimated = isAnimated | ||
| 
											5 years ago
										 |             self.animationDuration = animationDuration | ||
| 
											6 years ago
										 |             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 | ||
| 
											5 years ago
										 |             pathAnimation.duration = configuration.animationDuration | ||
| 
											6 years ago
										 |             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 | ||
| 
											5 years ago
										 |             colorAnimation.duration = configuration.animationDuration | ||
| 
											6 years ago
										 |             layer.add(colorAnimation, forKey: colorAnimation.keyPath) | ||
|  |         } | ||
|  |         layer.shadowColor = newColor | ||
|  |         layer.shadowOffset = configuration.offset | ||
|  |         layer.shadowOpacity = configuration.opacity | ||
|  |         layer.shadowRadius = configuration.radius | ||
|  |     } | ||
|  | } |