Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Example/IHProgressHUD/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class ViewController : UIViewController {


@IBAction func showSuccessWithStatus(_ sender: Any) {
IHProgressHUD.showSuccesswithStatus("Status Sucess")
IHProgressHUD.showSuccesswithStatus("Status Success")
}

@IBAction func showErrorWithStatus(_ sender: UIButton) {
Expand Down
2 changes: 1 addition & 1 deletion Example/tvOSSample/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class ViewController: UIViewController {


@IBAction func showSuccessWithStatus(_ sender: Any) {
IHProgressHUD.showSuccesswithStatus("Status Sucess")
IHProgressHUD.showSuccesswithStatus("Status Success")
}

@IBAction func showErrorWithStatus(_ sender: UIButton) {
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
108 changes: 54 additions & 54 deletions IHProgressHUD/Classes/IndefiniteAnimatedView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class IndefiniteAnimatedView : UIView {
private var activityIndicator : UIActivityIndicatorView?
private var strokeThickness : CGFloat?
private var strokeColor : UIColor?
private var indefinteAnimatedLayer : CAShapeLayer?
private var indefiniteAnimatedGradientLayer : CAGradientLayer?
private var radius : CGFloat?

override init(frame: CGRect) {
Expand All @@ -37,9 +37,9 @@ extension IndefiniteAnimatedView {
if (self.radius != radius) {
self.radius = radius

self.getIndefinteAnimatedLayer().removeFromSuperlayer()
self.indefinteAnimatedLayer = nil
getIndefiniteAnimatedGradientLayer().removeFromSuperlayer()
indefiniteAnimatedGradientLayer = nil

if superview != nil {
layoutAnimatedLayer()
}
Expand All @@ -48,50 +48,64 @@ extension IndefiniteAnimatedView {

func setIndefinite(strokeThickness : CGFloat) {
self.strokeThickness = strokeThickness
if let strkthickness = self.strokeThickness {
getIndefinteAnimatedLayer().lineWidth = strkthickness

getIndefiniteAnimatedGradientLayer().removeFromSuperlayer()
indefiniteAnimatedGradientLayer = nil

if superview != nil {
layoutAnimatedLayer()
}
}

func setIndefinite(strokeColor: UIColor) {
self.strokeColor = strokeColor
getIndefinteAnimatedLayer().strokeColor = strokeColor.cgColor

getIndefiniteAnimatedGradientLayer().removeFromSuperlayer()
indefiniteAnimatedGradientLayer = nil

if superview != nil {
layoutAnimatedLayer()
}
}

}

//MARK: - Getter Functions
extension IndefiniteAnimatedView {
private func getIndefinteAnimatedLayer() -> CAShapeLayer {
if self.indefinteAnimatedLayer != nil {
return self.indefinteAnimatedLayer!
private func getIndefiniteAnimatedGradientLayer() -> CAGradientLayer {
if indefiniteAnimatedGradientLayer != nil {
return indefiniteAnimatedGradientLayer!
} else {
let localRingRadius : CGFloat = radius ?? 18
let localStrokeThickness : CGFloat = strokeThickness ?? 2
let localStrokeColor : UIColor = strokeColor ?? UIColor.black

let localRingRadius: CGFloat = radius ?? 18
let localStrokeThickness: CGFloat = strokeThickness ?? 2
let localStrokeColor: UIColor = strokeColor ?? UIColor.black
let arcCenter = CGPoint(x: localRingRadius + localStrokeThickness / 2 + 5, y: localRingRadius + localStrokeThickness / 2 + 5)
let smoothedPath = UIBezierPath(arcCenter: arcCenter, radius: localRingRadius, startAngle: -CGFloat.pi / 2, endAngle: CGFloat.pi + CGFloat.pi / 2, clockwise: true)

indefinteAnimatedLayer = CAShapeLayer()
indefinteAnimatedLayer?.contentsScale = UIScreen.main.scale
indefinteAnimatedLayer?.frame = CGRect.init(x: 0, y: 0, width: arcCenter.x * 2, height: arcCenter.y * 2)
indefinteAnimatedLayer?.fillColor = UIColor.clear.cgColor
indefinteAnimatedLayer?.strokeColor = localStrokeColor.cgColor
indefinteAnimatedLayer?.lineWidth = localStrokeThickness
indefinteAnimatedLayer?.lineCap = CAShapeLayerLineCap.round
indefinteAnimatedLayer?.lineJoin = CAShapeLayerLineJoin.bevel
indefinteAnimatedLayer?.path = smoothedPath.cgPath
let smoothedPath = UIBezierPath(arcCenter: arcCenter, radius: localRingRadius, startAngle: .pi * 3 / 2, endAngle: -0.5 * .pi, clockwise: false)

let maskLayer = CALayer()
let image = loadImageBundle(named: "angle-mask")!
maskLayer.contents = image.cgImage
maskLayer.frame = indefinteAnimatedLayer!.bounds
indefinteAnimatedLayer?.mask = maskLayer
let shapeLayer = CAShapeLayer()
shapeLayer.contentsScale = UIScreen.main.scale
shapeLayer.frame = CGRect(x: 0.0, y: 0.0, width: arcCenter.x * 2, height: arcCenter.y * 2)
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = strokeColor?.cgColor
shapeLayer.lineWidth = localStrokeThickness
shapeLayer.lineCap = .round
shapeLayer.lineJoin = .round
shapeLayer.path = smoothedPath.cgPath
shapeLayer.strokeStart = 0.4
shapeLayer.strokeEnd = 1.0

let animationDuration = TimeInterval.init(1)
let linearCurve = CAMediaTimingFunction.init(name: .linear)
let animation = CABasicAnimation.init(keyPath: "transform.rotation")
indefiniteAnimatedGradientLayer = CAGradientLayer()
indefiniteAnimatedGradientLayer?.startPoint = CGPoint(x: 0.5, y: 0.0)
indefiniteAnimatedGradientLayer?.endPoint = CGPoint(x: 0.5, y: 1.0)
indefiniteAnimatedGradientLayer?.frame = shapeLayer.bounds
indefiniteAnimatedGradientLayer?.colors = [localStrokeColor.withAlphaComponent(0).cgColor, localStrokeColor.withAlphaComponent(0.5).cgColor, localStrokeColor.cgColor]
indefiniteAnimatedGradientLayer?.locations = [NSNumber(value: 0.25), NSNumber(value: 0.5), NSNumber(value: 1.0)]
indefiniteAnimatedGradientLayer?.mask = shapeLayer

let animationDuration = TimeInterval(1)
let linearCurve = CAMediaTimingFunction(name: .linear)
let animation = CABasicAnimation(keyPath: "transform.rotation")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = animationDuration
Expand All @@ -100,28 +114,14 @@ extension IndefiniteAnimatedView {
animation.repeatCount = .infinity
animation.fillMode = .forwards
animation.autoreverses = false
indefinteAnimatedLayer?.mask?.add(animation, forKey: "rotate")


let animationGroup = CAAnimationGroup.init()
animationGroup.duration = animationDuration
animationGroup.repeatCount = .infinity
animationGroup.isRemovedOnCompletion = false
animationGroup.timingFunction = linearCurve

let strokeStartAnimation = CABasicAnimation.init(keyPath: "strokeStart")
strokeStartAnimation.duration = animationDuration
strokeStartAnimation.fromValue = 0.015
strokeStartAnimation.toValue = 0.0001

animationGroup.animations = [strokeStartAnimation]
indefinteAnimatedLayer?.add(animationGroup, forKey: "progress")
indefiniteAnimatedGradientLayer?.add(animation, forKey: "progress")
}
return self.indefinteAnimatedLayer!
return self.indefiniteAnimatedGradientLayer!
}
}

//MARK: - ActivityIndicatorView Functions
// MARK: - ActivityIndicatorView Functions

extension IndefiniteAnimatedView {

func removeAnimationLayer() {
Expand All @@ -130,7 +130,7 @@ extension IndefiniteAnimatedView {
activityView.removeFromSuperview()
}
}
getIndefinteAnimatedLayer().removeFromSuperlayer()
getIndefiniteAnimatedGradientLayer().removeFromSuperlayer()
}

func startAnimation() {
Expand All @@ -157,13 +157,13 @@ extension IndefiniteAnimatedView {
if let _ = newSuperview {
layoutAnimatedLayer()
} else {
getIndefinteAnimatedLayer().removeFromSuperlayer()
indefinteAnimatedLayer = nil
getIndefiniteAnimatedGradientLayer().removeFromSuperlayer()
indefiniteAnimatedGradientLayer = nil
}
}

private func layoutAnimatedLayer() {
let calayer = getIndefinteAnimatedLayer()
let calayer = getIndefiniteAnimatedGradientLayer()
self.layer.addSublayer(calayer)
let widthDiff: CGFloat = bounds.width - layer.bounds.width
let heightDiff: CGFloat = bounds.height - layer.bounds.height
Expand Down
6 changes: 3 additions & 3 deletions IHProgressHUD/Classes/ProgressAnimatedView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class ProgressAnimatedView: UIView {
let localStrokeThickness : CGFloat = strokeThickness ?? 2
return CGSize(width: (localRadius + localStrokeThickness / 2 + 5) * 2, height: (localRadius + localStrokeThickness / 2 + 5) * 2)
}

}

//MARK: - Setter
Expand All @@ -71,7 +71,7 @@ extension ProgressAnimatedView {
func set(strokeThickness : CGFloat) {
self.strokeThickness = strokeThickness
getRingAnimatedLayer().lineWidth = strokeThickness

if superview != nil {
layoutAnimatedLayer()
}
Expand Down Expand Up @@ -118,7 +118,7 @@ extension ProgressAnimatedView {
_ringAnimatedLayer.strokeColor = strokeColor?.cgColor
_ringAnimatedLayer.lineWidth = localStrokeThickness
_ringAnimatedLayer.lineCap = .round
_ringAnimatedLayer.lineJoin = .bevel
_ringAnimatedLayer.lineJoin = .round
_ringAnimatedLayer.path = smoothedPath.cgPath
self.ringAnimatedLayer = _ringAnimatedLayer
}
Expand Down