π Professional SwiftUI Gesture Library
π Advanced Gesture Recognition & Handling
π― Interactive & Responsive User Experience
- π Overview
- β¨ Key Features
- π Basic Gestures
- π Advanced Gestures
- π― Custom Gestures
- π Quick Start
- π± Usage Examples
- π§ Configuration
- π Documentation
- π€ Contributing
- π License
- π Acknowledgments
- π Project Statistics
- π Stargazers
SwiftUI Gesture Library is the most comprehensive, professional, and feature-rich gesture recognition library for SwiftUI applications. Built with enterprise-grade standards and modern gesture handling practices, this library provides essential tools for creating interactive, responsive, and intuitive user experiences.
- π Basic Gestures: Tap, long press, and simple touch gestures
- π Advanced Gestures: Drag, pinch, rotation, and complex gestures
- π― Custom Gestures: Custom gesture recognition and handling
- β‘ Performance: Optimized for smooth gesture recognition
- π¨ Customization: Highly customizable gesture parameters
- π± Cross-Platform: iOS, iPadOS, macOS, and watchOS support
- βΏ Accessibility: Gesture accessibility and alternative input
- π Learning: Comprehensive gesture tutorials and examples
- Tap Gestures: Single tap, double tap, and multi-tap recognition
- Long Press Gestures: Long press with duration and pressure control
- Touch Gestures: Touch down, touch up, and touch move events
- Hover Gestures: Mouse hover and cursor interaction
- Keyboard Gestures: Keyboard input and shortcut recognition
- Voice Gestures: Voice command and speech recognition
- Eye Tracking: Eye movement and gaze tracking
- Head Tracking: Head movement and orientation tracking
- Drag Gestures: Drag and drop with velocity and direction
- Pinch Gestures: Pinch to zoom with scale and rotation
- Rotation Gestures: Rotation with angle and center point
- Swipe Gestures: Swipe with direction and distance
- Pan Gestures: Pan with translation and velocity
- Scale Gestures: Scale with factor and center point
- Multi-Touch: Multi-finger gesture recognition
- Gesture Sequences: Complex gesture sequences and combinations
- Custom Recognition: Custom gesture pattern recognition
- Machine Learning: ML-based gesture recognition
- Pattern Matching: Gesture pattern matching and validation
- Gesture Training: User-defined gesture training
- Gesture Classification: Gesture classification and categorization
- Gesture Analytics: Gesture usage analytics and insights
- Gesture Optimization: Gesture performance optimization
- Gesture Accessibility: Gesture accessibility features
// Tap gesture manager
let tapGestureManager = TapGestureManager()
// Configure tap gestures
let tapConfig = TapGestureConfiguration()
tapConfig.enableSingleTap = true
tapConfig.enableDoubleTap = true
tapConfig.enableTripleTap = true
tapConfig.enableMultiTap = true
// Setup tap gesture manager
tapGestureManager.configure(tapConfig)
// Create single tap gesture
let singleTapGesture = SingleTapGesture(
count: 1,
minimumDuration: 0.1,
maximumDuration: 0.5
)
// Add single tap gesture
tapGestureManager.addSingleTapGesture(
to: customView,
gesture: singleTapGesture
) { result in
switch result {
case .success(let tap):
print("β
Single tap detected")
print("Location: \(tap.location)")
print("Timestamp: \(tap.timestamp)")
case .failure(let error):
print("β Single tap gesture failed: \(error)")
}
}
// Create double tap gesture
let doubleTapGesture = DoubleTapGesture(
count: 2,
minimumDuration: 0.1,
maximumDuration: 0.5,
maximumDistance: 50.0
)
// Add double tap gesture
tapGestureManager.addDoubleTapGesture(
to: customView,
gesture: doubleTapGesture
) { result in
switch result {
case .success(let tap):
print("β
Double tap detected")
print("Location: \(tap.location)")
print("Interval: \(tap.interval)s")
case .failure(let error):
print("β Double tap gesture failed: \(error)")
}
}
// Long press gesture manager
let longPressGestureManager = LongPressGestureManager()
// Configure long press gestures
let longPressConfig = LongPressGestureConfiguration()
longPressConfig.enableMinimumDuration = true
longPressConfig.enableMaximumDistance = true
longPressConfig.enablePressureSensitivity = true
longPressConfig.enableHapticFeedback = true
// Setup long press gesture manager
longPressGestureManager.configure(longPressConfig)
// Create long press gesture
let longPressGesture = LongPressGesture(
minimumDuration: 0.5,
maximumDistance: 10.0,
pressureSensitivity: 0.5
)
// Add long press gesture
longPressGestureManager.addLongPressGesture(
to: customView,
gesture: longPressGesture
) { result in
switch result {
case .success(let press):
print("β
Long press detected")
print("Location: \(press.location)")
print("Duration: \(press.duration)s")
print("Pressure: \(press.pressure)")
case .failure(let error):
print("β Long press gesture failed: \(error)")
}
}
// Create variable long press gesture
let variableLongPressGesture = VariableLongPressGesture(
minimumDuration: 0.3,
maximumDuration: 2.0,
pressureSensitivity: 0.3
)
// Add variable long press gesture
longPressGestureManager.addVariableLongPressGesture(
to: customView,
gesture: variableLongPressGesture
) { result in
switch result {
case .success(let press):
print("β
Variable long press detected")
print("Duration: \(press.duration)s")
print("Intensity: \(press.intensity)")
case .failure(let error):
print("β Variable long press gesture failed: \(error)")
}
}
// Drag gesture manager
let dragGestureManager = DragGestureManager()
// Configure drag gestures
let dragConfig = DragGestureConfiguration()
dragConfig.enableTranslation = true
dragConfig.enableVelocity = true
dragConfig.enableDirection = true
dragConfig.enableDistance = true
// Setup drag gesture manager
dragGestureManager.configure(dragConfig)
// Create drag gesture
let dragGesture = DragGesture(
minimumDistance: 10.0,
coordinateSpace: .local
)
// Add drag gesture
dragGestureManager.addDragGesture(
to: customView,
gesture: dragGesture
) { result in
switch result {
case .success(let drag):
print("β
Drag gesture detected")
print("Translation: \(drag.translation)")
print("Velocity: \(drag.velocity)")
print("Direction: \(drag.direction)")
print("Distance: \(drag.distance)")
case .failure(let error):
print("β Drag gesture failed: \(error)")
}
}
// Create constrained drag gesture
let constrainedDragGesture = ConstrainedDragGesture(
minimumDistance: 10.0,
maximumDistance: 200.0,
allowedDirections: [.horizontal, .vertical]
)
// Add constrained drag gesture
dragGestureManager.addConstrainedDragGesture(
to: customView,
gesture: constrainedDragGesture
) { result in
switch result {
case .success(let drag):
print("β
Constrained drag detected")
print("Translation: \(drag.translation)")
print("Direction: \(drag.direction)")
print("IsConstrained: \(drag.isConstrained)")
case .failure(let error):
print("β Constrained drag gesture failed: \(error)")
}
}
// Pinch gesture manager
let pinchGestureManager = PinchGestureManager()
// Configure pinch gestures
let pinchConfig = PinchGestureConfiguration()
pinchConfig.enableScale = true
pinchConfig.enableRotation = true
pinchConfig.enableCenter = true
pinchConfig.enableVelocity = true
// Setup pinch gesture manager
pinchGestureManager.configure(pinchConfig)
// Create pinch gesture
let pinchGesture = PinchGesture(
minimumScale: 0.5,
maximumScale: 3.0,
coordinateSpace: .local
)
// Add pinch gesture
pinchGestureManager.addPinchGesture(
to: customView,
gesture: pinchGesture
) { result in
switch result {
case .success(let pinch):
print("β
Pinch gesture detected")
print("Scale: \(pinch.scale)")
print("Rotation: \(pinch.rotation)Β°")
print("Center: \(pinch.center)")
print("Velocity: \(pinch.velocity)")
case .failure(let error):
print("β Pinch gesture failed: \(error)")
}
}
// Create zoom pinch gesture
let zoomPinchGesture = ZoomPinchGesture(
minimumScale: 0.1,
maximumScale: 10.0,
zoomFactor: 1.5
)
// Add zoom pinch gesture
pinchGestureManager.addZoomPinchGesture(
to: customView,
gesture: zoomPinchGesture
) { result in
switch result {
case .success(let pinch):
print("β
Zoom pinch detected")
print("Scale: \(pinch.scale)")
print("Zoom Level: \(pinch.zoomLevel)")
print("Is Zooming: \(pinch.isZooming)")
case .failure(let error):
print("β Zoom pinch gesture failed: \(error)")
}
}
// Rotation gesture manager
let rotationGestureManager = RotationGestureManager()
// Configure rotation gestures
let rotationConfig = RotationGestureConfiguration()
rotationConfig.enableAngle = true
rotationConfig.enableCenter = true
rotationConfig.enableVelocity = true
rotationConfig.enableDirection = true
// Setup rotation gesture manager
rotationGestureManager.configure(rotationConfig)
// Create rotation gesture
let rotationGesture = RotationGesture(
minimumAngle: 5.0,
maximumAngle: 360.0,
coordinateSpace: .local
)
// Add rotation gesture
rotationGestureManager.addRotationGesture(
to: customView,
gesture: rotationGesture
) { result in
switch result {
case .success(let rotation):
print("β
Rotation gesture detected")
print("Angle: \(rotation.angle)Β°")
print("Center: \(rotation.center)")
print("Velocity: \(rotation.velocity)")
print("Direction: \(rotation.direction)")
case .failure(let error):
print("β Rotation gesture failed: \(error)")
}
}
// Create constrained rotation gesture
let constrainedRotationGesture = ConstrainedRotationGesture(
minimumAngle: 10.0,
maximumAngle: 180.0,
snapToAngles: [0, 45, 90, 135, 180]
)
// Add constrained rotation gesture
rotationGestureManager.addConstrainedRotationGesture(
to: customView,
gesture: constrainedRotationGesture
) { result in
switch result {
case .success(let rotation):
print("β
Constrained rotation detected")
print("Angle: \(rotation.angle)Β°")
print("Snapped Angle: \(rotation.snappedAngle)Β°")
print("Is Snapped: \(rotation.isSnapped)")
case .failure(let error):
print("β Constrained rotation gesture failed: \(error)")
}
}
// Custom gesture manager
let customGestureManager = CustomGestureManager()
// Configure custom gestures
let customConfig = CustomGestureConfiguration()
customConfig.enablePatternRecognition = true
customConfig.enableMachineLearning = true
customConfig.enableGestureTraining = true
customConfig.enableGestureClassification = true
// Setup custom gesture manager
customGestureManager.configure(customConfig)
// Create custom gesture pattern
let customGesturePattern = CustomGesturePattern(
name: "Circle Gesture",
points: circlePoints,
tolerance: 0.1
)
// Add custom gesture
customGestureManager.addCustomGesture(
to: customView,
pattern: customGesturePattern
) { result in
switch result {
case .success(let gesture):
print("β
Custom gesture detected")
print("Pattern: \(gesture.pattern)")
print("Confidence: \(gesture.confidence)%")
print("Duration: \(gesture.duration)s")
case .failure(let error):
print("β Custom gesture failed: \(error)")
}
}
// Create ML-based gesture
let mlGesture = MLGesture(
model: "gesture_classifier",
confidence: 0.8,
categories: ["swipe", "circle", "square", "triangle"]
)
// Add ML gesture
customGestureManager.addMLGesture(
to: customView,
gesture: mlGesture
) { result in
switch result {
case .success(let gesture):
print("β
ML gesture detected")
print("Category: \(gesture.category)")
print("Confidence: \(gesture.confidence)%")
print("All predictions: \(gesture.allPredictions)")
case .failure(let error):
print("β ML gesture failed: \(error)")
}
}
// Gesture training manager
let gestureTrainingManager = GestureTrainingManager()
// Configure gesture training
let trainingConfig = GestureTrainingConfiguration()
trainingConfig.enableUserTraining = true
trainingConfig.enableGestureValidation = true
trainingConfig.enableGestureOptimization = true
trainingConfig.enableGestureAnalytics = true
// Setup gesture training manager
gestureTrainingManager.configure(trainingConfig)
// Train custom gesture
gestureTrainingManager.trainGesture(
name: "My Custom Gesture",
samples: gestureSamples,
category: "navigation"
) { result in
switch result {
case .success(let training):
print("β
Gesture training completed")
print("Accuracy: \(training.accuracy)%")
print("Samples: \(training.samples)")
print("Duration: \(training.duration)s")
case .failure(let error):
print("β Gesture training failed: \(error)")
}
}
// Validate gesture
gestureTrainingManager.validateGesture(
name: "My Custom Gesture",
testSamples: testSamples
) { result in
switch result {
case .success(let validation):
print("β
Gesture validation completed")
print("Precision: \(validation.precision)")
print("Recall: \(validation.recall)")
print("F1 Score: \(validation.f1Score)")
case .failure(let error):
print("β Gesture validation failed: \(error)")
}
}
- iOS 15.0+ with iOS 15.0+ SDK
- Swift 5.9+ programming language
- Xcode 15.0+ development environment
- Git version control system
- Swift Package Manager for dependency management
# Clone the repository
git clone https://github.com/muhittincamdali/SwiftUI-Gesture-Library.git
# Navigate to project directory
cd SwiftUI-Gesture-Library
# Install dependencies
swift package resolve
# Open in Xcode
open Package.swift
Add the framework to your project:
dependencies: [
.package(url: "https://github.com/muhittincamdali/SwiftUI-Gesture-Library.git", from: "1.0.0")
]
import SwiftUIGestureLibrary
// Initialize gesture library manager
let gestureLibraryManager = GestureLibraryManager()
// Configure gesture library
let gestureConfig = GestureLibraryConfiguration()
gestureConfig.enableBasicGestures = true
gestureConfig.enableAdvancedGestures = true
gestureConfig.enableCustomGestures = true
gestureConfig.enableAccessibility = true
// Start gesture library manager
gestureLibraryManager.start(with: gestureConfig)
// Configure gesture performance
gestureLibraryManager.configurePerformance { config in
config.enableSmoothRecognition = true
config.enableReducedLatency = true
config.enableAccessibility = true
}
// Simple tap gesture
let simpleTap = SimpleTapGesture()
// Create tap gesture
simpleTap.createTapGesture(
count: 1,
duration: 0.5
) { result in
switch result {
case .success(let tap):
print("β
Tap detected")
print("Location: \(tap.location)")
case .failure(let error):
print("β Tap gesture failed: \(error)")
}
}
// Simple drag gesture
let simpleDrag = SimpleDragGesture()
// Create drag gesture
simpleDrag.createDragGesture(
minimumDistance: 10.0
) { result in
switch result {
case .success(let drag):
print("β
Drag detected")
print("Translation: \(drag.translation)")
case .failure(let error):
print("β Drag gesture failed: \(error)")
}
}
// Configure gesture library settings
let gestureConfig = GestureLibraryConfiguration()
// Enable gesture types
gestureConfig.enableBasicGestures = true
gestureConfig.enableAdvancedGestures = true
gestureConfig.enableCustomGestures = true
gestureConfig.enableAccessibility = true
// Set basic gesture settings
gestureConfig.enableSingleTap = true
gestureConfig.enableDoubleTap = true
gestureConfig.enableLongPress = true
gestureConfig.enableTouchEvents = true
// Set advanced gesture settings
gestureConfig.enableDrag = true
gestureConfig.enablePinch = true
gestureConfig.enableRotation = true
gestureConfig.enableSwipe = true
// Set custom gesture settings
gestureConfig.enablePatternRecognition = true
gestureConfig.enableMachineLearning = true
gestureConfig.enableGestureTraining = true
gestureConfig.enableGestureClassification = true
// Apply configuration
gestureLibraryManager.configure(gestureConfig)
Comprehensive API documentation is available for all public interfaces:
- Gesture Library Manager API - Core gesture functionality
- Basic Gestures API - Basic gesture features
- Advanced Gestures API - Advanced gesture capabilities
- Custom Gestures API - Custom gesture features
- Gesture Training API - Gesture training capabilities
- Performance API - Performance optimization
- Configuration API - Configuration options
- Accessibility API - Accessibility features
- Getting Started Guide - Quick start tutorial
- Basic Gestures Guide - Basic gesture setup
- Advanced Gestures Guide - Advanced gesture setup
- Custom Gestures Guide - Custom gesture setup
- Gesture Training Guide - Gesture training setup
- Performance Guide - Performance optimization
- Accessibility Guide - Accessibility features
- Gesture Best Practices Guide - Gesture best practices
- Basic Examples - Simple gesture implementations
- Advanced Examples - Complex gesture scenarios
- Basic Gestures Examples - Basic gesture examples
- Advanced Gestures Examples - Advanced gesture examples
- Custom Gestures Examples - Custom gesture examples
- Training Examples - Gesture training examples
We welcome contributions! Please read our Contributing Guidelines for details on our code of conduct and the process for submitting pull requests.
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open Pull Request
- Follow Swift API Design Guidelines
- Maintain 100% test coverage
- Use meaningful commit messages
- Update documentation as needed
- Follow gesture best practices
- Implement proper error handling
- Add comprehensive examples
This project is licensed under the MIT License - see the LICENSE file for details.
- Apple for the excellent iOS development platform
- The Swift Community for inspiration and feedback
- All Contributors who help improve this framework
- Gesture Recognition Community for best practices and standards
- Open Source Community for continuous innovation
- iOS Developer Community for gesture insights
- UX/UI Community for interaction expertise
β Star this repository if it helped you!