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.git
Alternatively, 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
Source
folder into your project. - Add
CameraButtonView
to your storyboard or use it programmatically in your view controllers.
import CameraButtonKit
class ViewController: UIViewController, CameraButtonDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let cameraButton = 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.