A customizable and lightweight camera-style record button for iOS, with support for tap, long-press recording, progress spinner animation, and delegate callbacks.
- π₯ Long-press to start recording
- π’ Tap to trigger single-shot action
- π Circular animated spinner around button
- β±οΈ Auto-stop after max duration
β οΈ Delegate warning if recording is too short- π Customizable sizes, colors, and timings
- iOS 13.0+
- Swift 5
- Xcode 12 or higher
This is an Xcode project, so you can directly clone or download the project into your workspace.
git clone https://github.com/jaydeep-godhani/CameraButtonKit.gitAlternatively, you can download the project as a ZIP file from the GitHub repository page.
To integrate the CameraButtonView into your own Xcode project:
- Download or clone the repository.
- Copy the contents of the
Sourcefolder into your project. - Add
CameraButtonViewto your storyboard or use it programmatically in your view controllers.
import CameraButtonKit
classViewController:UIViewController,CameraButtonDelegate{overridefunc viewDidLoad(){
super.viewDidLoad()letcameraButton=CameraButtonView(frame:CGRect(x:0, y:0, width:100, height:100))
cameraButton.center = view.center
cameraButton.delegate =self
view.addSubview(cameraButton)}
// MARK: - CameraButtonDelegate Methods
func onStartRecord(){print("Started recording")}func onEndRecord(){print("Finished recording")}func onDurationTooShortError(){print("Recording too short!")}func onSingleTap(){print("Single tap action")}func onCancelled(){print("Recording cancelled")}}| Property | Description | Default |
|---|---|---|
lineWidth | Thickness of the spinner | 10 |
spinnerLineSpacing | Gap between button and spinner | 20 |
spinnerPadding | Additional space outside the spinner | 15 |
minRecordDuration | Minimum valid duration in seconds | 0.3 |
maxRecordDuration | Maximum allowed duration | 60.0 |
You can also change the spinner color by updating spinnerLayer.strokeColor.
We welcome contributions! If you find a bug, have an idea for a new extension, or want to improve the documentation, feel free to fork the repo and create a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.
