Skip to main content

Around2Me – Instantly Discover Nearby Essentials

In today’s fast-paced world, finding what you need — exactly when you need it — should be effortless. That’s where Around2Me comes in. Whether you're navigating a new city, running errands, or just looking for a bite nearby, Around2Me helps you instantly find nearby essentials like ATMs, restaurants, hospitals, gas stations , and much more. Around2Me 🚀 What Makes Around2Me Different? Unlike many location-based apps that are bloated with unnecessary features or force users to sign up, Around2Me is lightweight, private, and instant . Here's how: 📍 Location-Based Discovery The app instantly detects your current location and shows you relevant nearby places — from pharmacies to petrol pumps, cafes to banks. 🗺️ Map Integration Tap any place to view it on the map and get turn-by-turn directions in seconds. 🧩 Clean Categories Looking for something specific? Use quick-access filters like Hospitals , ATMs , Coffee Shops , or Parking . 🔐 No Signups, No Data Collection ...

Custom Loader (Activity Indicator) in Swift

Creating a custom activity indicator in Swift allows you to tailor the appearance and behavior of your loading spinner to fit the style of your app. Here's a step-by-step guide to creating a simple custom activity indicator using UIView


Step 1: Create a New Swift File for the Custom Activity Indicator

  1. Create a new Swift file and name it RotatingCirclesView.swift.

  2. Add the following code to define a custom UIView subclass for your activity indicator:

//

//  RotatingCirclesView.swift

//  Welcome In

//

//  Created by Praveen Kumar on 05/09/24.

//


import UIKit


class RotatingCirclesView: UIView {

    

    let circle1 = UIView(frame: CGRect(x: 20, y: 20, width: 60, height: 60))

    let circle2 = UIView(frame: CGRect(x: 120, y: 20, width: 60, height: 60))

    

    let position: [CGRect] = [CGRect(x: 30, y: 20, width: 60, height: 60), CGRect(x: 60, y: 15, width: 70, height: 70),CGRect(x: 110, y: 20, width: 60, height: 60), CGRect(x: 60, y: 25, width: 50, height: 50)]

    

    override init(frame: CGRect){

        super.init(frame: frame)

        configure()

    }

    

    required init?(coder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    private func configure(){

        translatesAutoresizingMaskIntoConstraints = false

        circle1.backgroundColor = UIColor.systemCyan.withAlphaComponent(0.9)

        circle1.layer.cornerRadius = circle1.frame.width/2

        circle1.layer.zPosition = 2

        

        circle2.backgroundColor = UIColor.systemPink.withAlphaComponent(0.9)

        circle2.layer.cornerRadius = circle2.frame.width/2

        circle2.layer.zPosition = 1

        

        addSubview(circle1)

        addSubview(circle2)

    }

    

    func animate(_ circle: UIView, counter: Int){

        var counter = counter

        UIView.animate(withDuration: 0.4, delay: 0,options: .curveLinear, animations: {

            circle.frame = self.position[counter]

            circle.layer.cornerRadius = circle.frame.width/2

            

            switch counter {

            case 1:

                if circle == self.circle1{ self.circle1.layer.zPosition = 2 }

            case 3:

                if circle == self.circle1{ self.circle1.layer.zPosition = 0}

            default:

                print("")

            }

        }){ (completed) in

            switch counter {

            case 0...2:

                counter += 1

            case 3:

                counter = 0

            default:

                print("")

            }

            self.animate(circle, counter: counter)

        }

    }

}

Step 2: Use the Custom Activity Indicator in Your View Controller

  1. Add the custom activity indicator to your view controller:

//  ViewController.swift

//  CustomActivityIndicators

//

//  Created by Praveen Kumar on 05/09/24.

//


import UIKit


class ViewController: UIViewController, UIGestureRecognizerDelegate {

    

    let rotatingCirclesView = RotatingCirclesView()


    override func viewDidLoad() {

        super.viewDidLoad()

        configuratinLoader()

        let tap =  UITapGestureRecognizer(target: self, action: #selector(self.viewTaped))

        view.addGestureRecognizer(tap)

    }

    private func configuratinLoader(){

        view.addSubview(rotatingCirclesView)

        NSLayoutConstraint.activate([

            rotatingCirclesView.centerXAnchor.constraint(equalTo: view.centerXAnchor),

            rotatingCirclesView.centerYAnchor.constraint(equalTo: view.centerYAnchor),

            rotatingCirclesView.heightAnchor.constraint(equalToConstant: 100),

            rotatingCirclesView.widthAnchor.constraint(equalToConstant: 200)

        ])

    }

    

    @objc func viewTaped(){

        rotatingCirclesView.animate(rotatingCirclesView.circle1, counter: 1)

        rotatingCirclesView.animate(rotatingCirclesView.circle2, counter: 3)

    }

}


Explanation
  • RotatingCirclesView Class:

    • Inherits from UIView to draw a circular path.
    • Configures two layers: one for the background and one for the animated circle.
  • ViewController:

    • Instantiates and adds the RotatingCirclesView to the view.
    • Configures layout constraints to center the indicator.
    • Starts and stops the animation to simulate a loading state.

Feel free to customize the appearance and animation of the RotatingCirclesView to better fit your app's design. - Github Source code:- https://github.com/praveenraman/CustomActivityIndicators.git

Comments