• Stars
    star
    151
  • Rank 246,057 (Top 5 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ“ค Custom UI component for iOS, replication of Apple's Apple Music player and Shortcutsโ€™ components view [Swift 5.0, iOS 12].

drawer-view Awesome

Platforms Language Autolayout CocoaPod License

Last Update: 06/April/2019.

If you like the project, please give it a star โญ It will show the creator your appreciation and help others to discover the repo.

โœ๏ธ About

๐Ÿ“ค Drawer View is a custom UI component, replication of Apple's Apple Music player and Shortcuts' components view (also can be seen in Maps app).

๐Ÿ— Installation

CocoaPods

drawer-view is availabe via CocoaPods

pod 'drawer-view', '~> 1.0.4' 

Manual

You can always use copy-paste the sources method ๐Ÿ˜„. Or you can compile the framework and include it with your project.

๐Ÿ“บ Demo

Please wait while the .gif files are loading... (they are about 25Mb)

Drawing

๐Ÿฑ Features

  • Easy to use
    • You only need to instantiate a class called DrawerView and add your UI components.
  • Flexible API
    • Includes a number of customization points that allows to decorate the DrawerView as you'd like.
  • Callbacks
    • You can use built-in callbacks in order to integrate animations or get the state changes.
  • Behavior
    • You may tell the component to close the drawer when the device is rotated or user interacts with the child components.
  • Autolayout
    • You don't need to do anything related to autolayout - the component properly handles all the changes. The only thing you need to do is to add your UI components and make sure that aulayout constraints are properly setup for them.

๐Ÿ“š Code Samples

Instantiation

The most simple instantiation: you only need to provide the superview:

let _ = DrawerView(superView: view)

You can specify how much space will be between top anchor of the DrawerView and the superview by setting topLayoutGuidePadding property and how tall the DrawerView will be when it is closed by setting closedHeight property:

let _ = DrawerView(topLayoutGuidePadding: 100, closedHeight: 82, superView: view)

You can specify blur effect and its type. It will be animated alongside with the drawer view. There are several styles for blur:

let _ = DrawerView(blurStyle: .light, superView: view)

By default the DrawerView will include a visual indicator called LineArrow. LineArrow is an indicator that decorates the view and helps a user with interaction. You can change the properties of the indicator by setting its height, width and color:

let _ = DrawerView(lineArrow: (height: 8, width: 82, color: .black), superView: view)
// Or you can set `nil` in order to turn the indicator off

Properties & Methods

You can change the behavior of the component when a device is rotated. By default the DrawerView will not be closed when a device is rotated. However, you can change this behavior:

drawerView.closeOnRotation = true

You can programmatically change the state of the component:

drawerView.change(state: .open, shouldAnimate: true)

By default, interactions with the child views don't affect the DrawerView anyhow. However, you can change this behavior and allow the DrawerView to be dismissed when one of the child views are interacted:

drawerView.closeOnChildViewTaps = true

There is an animation closure that is used to animate the external components alongside with the DrawerView:

drawerView.animationClosure = { state in
    switch state {
    case .open:
      someOtherView.alpha = 1.0
    case .closed:
      someOtherView.alpha = 0.0
  }
}

You can optionally specify a completion closure that gets called when animation is completed:

drawerView.completionClosure = { state in
  switch state {
    case .open:
      service.launch()
    case .closed:
      service.dismiss()
    }
}

The third and final callback closure can be used to get DrawerViewstate changes:

drawerView.onStateChangeClosure = { state in
  state == .closed ? showDialog() : doNothing()
}

Other settable properties

Also there are many other properties that be customized:

drawerView.cornerRadius = 60
drawerView.animationDuration = 2.5
drawerView.animationDampingRatio = 0.9
drawerView.shadowRadius = 0.25
drawerView.shadowOpacity = 0.132
drawerView.closeOnBlurTapped = true
drawerView.closeOnDrawerTaps = true

๐Ÿ‘จโ€๐Ÿ’ป Author

Astemir Eleev

๐Ÿ”– Licence

The project is available under MIT licence

More Repositories

1

ios-learning-materials

๐Ÿ“š Curated list of articles, tutorials and repos that may help you dig a little bit deeper into iOS [and Apple Platforms].
Swift
1,976
star
2

uicollectionview-layouts-kit

๐Ÿ“Custom layouts for UICollectionView with examples [iOS 12+].
Swift
677
star
3

compositional-layouts-kit

๐Ÿ“ Advanced compositional layouts for UICollectionView [iOS 13+].
Swift
389
star
4

flappy-fly-bird

๐Ÿฆ Flappy Bird game reincarnation [GameplayKit, SpriteKit, iOS 12+].
Swift
331
star
5

swiftui-2048

๐ŸŽฒ Classic 2048 game [SwiftUI 3.0, iOS 15.0+, macOS 12.0+].
Swift
216
star
6

swift-design-patterns

๐Ÿš€ The ultimate collection of Software Design Patterns & Principles with examples [36/79 Patterns].
Swift
123
star
7

expandable-collection-view-kit

๐Ÿ—‚ Expandable, hierarchical, flexible, declarative UICollectionView with diffable data sources & SwiftUI-like tree items builder [Swift 5.1, iOS & iPadOS 13].
Swift
115
star
8

spritekit-water-node

๐ŸŒŠ Custom SpriteKit node that allows to simulate 2D water with respect to physics. The app demonstrates Flocking behaviour using GameplayKit, key-frame animation and custom fragment shader chaining (GLSL) ๐Ÿคฏ
Swift
93
star
9

ios-spritekit-shader-sandbox

๐Ÿ‘พ Collection of custom effects for SpriteKit implemented using GLSL/Metal shaders.
Swift
74
star
10

extensions-kit

๐Ÿ“ฆ Collection of Swift+Apple Frameworks extensions for speeding up software development [iOS & iPadOS].
Swift
71
star
11

tic-tac-toe

๐Ÿ•น iOS game - classic Tic Tac Toe with AI and state machines [Swift + SpriteKit + GameplayKit].
Swift
62
star
12

ios-scenekit-shadertoy

๐ŸŽฎ Easily add, changed and combine Vertex and Fragment shaders for SceneKit objects. Perfect tool for prototyping shaders in the context of SceneKit framework.
Swift
52
star
13

swift-algorithms-data-structs

๐Ÿ“’ Algorithms and Data Structures in Swift. The used approach attempts to fully utilize the Swift Standard Library and Protocol-Oriented paradigm.
Swift
49
star
14

soft-skills

๐ŸฆList of Soft Skills for software engineers/developers.
Markdown
39
star
15

grid-compositional-layout

๐Ÿงฒ Grid Compositional Layout is a SwiftUI 2.0 view that lays out the supplied views in a grid. Easily configurable and lazily retained [Swift 5.3, iOS 14.0+, iPadOS 14.0+, macOS 11.0(10.16)+]
Swift
39
star
16

skcomponents-kit

โš—๏ธ Collection of SpriteKit components for intermediate/advanced use cases.
Swift
36
star
17

sprite-liquids-ios-app

๐Ÿ’งDemonstrates a practical approach for liquid visualization using SpriteKit and CoreImage frameworks.
Objective-C
22
star
18

constraints-kit

๐Ÿ— Declarative, Chainable & Lightweight Auto Layout constraints framework for iOS.
Swift
21
star
19

hungry-wormy

๐Ÿ› iOS & macOS game - classic snake game [Swift + SpriteKit].
Swift
19
star
20

physics-vehicle

๐Ÿš— Physics-based 2D car behaviour and suspension demo [Swift, SpriteKit, iOS, macOS].
Swift
19
star
21

concurrency-kit

๐Ÿš„ Concurrency abstractions framework for Apple Platforms [Task, Atomic, Lock, Operation, etc.].
Swift
19
star
22

15-puzzle

๐Ÿงฉ iOS game - classic 15 Puzzle game [Swift + SpriteKit].
Swift
17
star
23

column-text-view-ui

๐Ÿ“„ Column Text View is an adaptive UI component that renders text in columns, horizontally [iOS 12, UIKit, TextKit, SwiftUI].
Swift
11
star
24

voice-recognition-ios-demo

๐ŸŽค Small app for voice recognition feature introduced in iOS 10.0 SDK.
Swift
9
star
25

metal-path-ios-app

๐Ÿค– Sandbox that holds various Metal API related scenes, from very fundamental to advanced developments
Swift
9
star
26

swift-functional

๐Ÿง  Articles and notes about functional programming in Swift.
Swift
7
star
27

message-view-ui

โœ‰๏ธ Easy to use HUD component for iOS [activity report, success or warning messages, etc.]
Swift
6
star
28

safari-tabs-extracter

๐Ÿ“— A script that extracts all tabs (as URLs) from Safari and saves them in a Markdown file [AppleScript]
AppleScript
6
star
29

jToolkit

โ˜•๏ธ Collection of various utilities, classes and shaders for Java + OpenGL + GLSL development.
Java
5
star
30

MTLTextureView

๐Ÿ–ผ๏ธ Render images as Metal textures.
Swift
4
star
31

device-kit

๐Ÿ“ฑGet extended information about an iOS/iPadOS device.
Swift
4
star
32

eleev.github.io

๐Ÿ’ผ Personal web page.
HTML
3
star
33

metal-particle-system-app

Particle system written on Metal shading language and Metal framework. ๐ŸŽŠ๐ŸŽ‰
Swift
2
star
34

jVirus

1
star