A library to imitate the iOS 10 Maps UI.

Overview

Pulley


A library to imitate the drawer in Maps for iOS 10/11. The master branch follows the latest currently released version of Swift. If you need an older version of Swift, you can specify it's version (e.g. 1.0.x) in your Podfile or use the code on the branch for that version. Older branches are unsupported.

Update / Migration Info

ATTENTION: Pulley 2.9.0 has new properties to support a new displayMode. The base functionality should work without any significant changes. The biggest change being the new displayMode of .compact to replicate Apple Maps Behavior on the iPhone SE size class devices. This is an exact replica of the behavior of the Apple Maps drawer, therefor when the currentDisplayMode of the PulleyViewController is .compact then the only supportedDrawerPositions for the view controller when in .compact mode are .open, .closed, and .collapsed. This mode also has new @IBInspectable properties, compactInsets and compactWidth. This mode behaves in a very similar way to .panel mode. See the pull request here for the motivation behind this feature. Also in this release, setDrawerContentViewController(controller: UIViewController, position: PulleyPosition? = nil, animated: Bool = true, completion: PulleyAnimationCompletionBlock?) has a new optional parameter position to set a new drawer position the drawer when a new DrawerContentViewController is set. See this pull request for the motivation behind this feature.

Pulley 2.5.0 had significant renaming changes to support new features. Although property names have changed, the functionality should work without any significant changes (aside from renaming). See this thread for additional information.

Pulley 2.4.0 changed PulleyPosition from an enum to a class. This won't affect most uses, but may affect your switch statements. Continue to use the static PulleyPosition values as usual and add a default case. This was done to allow marking some PulleyDrawerViewControllerDelegate methods as optional so they don't need to be implemented if you aren't using certain positions (or wish to use the default values). If you have questions, please open an issue.

Technical reason: Optional protocol methods require the @objc attribute. Arrays of Swift enums can't be exposed to Objective-C, and supportedDrawerPositions previously returned an array of PulleyPosition enums. This change allows for marking the protocol @objc so methods can be marked optional.

Introduction

Pulley is an easy to use drawer library meant to imitate the drawer in iOS 10/11's Maps app. It exposes a simple API that allows you to use any UIViewController subclass as the drawer content or the primary content.

Here's a preview (apologies for the potato gif):

Pulley Preview

Pulley iPad Preview

Installation

Installation with Cocoapods

pod 'Pulley'

Installation with Carthage

github "52inc/Pulley" Please read this issue regarding setup if using Carthage.

Installation with Swift Package Manager

Follow the developer documentation for Swift Package Manager (versions 2.8.x)

Manual Installation

Simply copy the files in the PulleyLib folder into your project.

How To use

Interface Builder

Pulley supports loading embedded view controllers from Interface Builder. In order to use Pulley with Interface Builder, you'll need to setup your PulleyViewController like this:

  1. Add 2 container views to the PulleyViewController view. One for the drawer content and one for the primary (background) content.
  2. Connect the container view for the primary (background) content to the outlet named primaryContentContainerView.
  3. Connect the container view for the drawer content to the outlet named drawerContentContainerView.
  4. Create an 'embed' segue between each container view and the view controller you want to display for that part of the drawer.
  5. Make sure you set the Module for the view controller to 'Pulley'. See this issue.

If you would like to customize the height of the "Collapsed" or "Partially Revealed" states of the drawer, have your Drawer Content view controller implement PulleyDrawerViewControllerDelegate. You can provide the height for your drawer content for both the Collapsed and Partially Revealed states.

Interface Builder Screenshot

Programmatically

Pulley supports loading view controllers programmatically. In order to use Pulley programmatically, please consider the following code snippet:

let mainContentVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PrimaryContentViewController")

let drawerContentVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DrawerContentViewController")

let pulleyController = PulleyViewController(contentViewController: mainContentVC, drawerViewController: drawerContentVC)

API

Important: The background of the internal drawer view is clear. If your view controller's view is also clear then you'll see the shadow rendering below where the view is. I'd recommend giving your view a color or using a UIVisualEffectView to make sure you don't see the shadow. You can set the shadow opacity to 0.0 if you want the shadow to be hidden.

Important: Drawer Content views are made 20pt too long in order to account for the bounce animation. Make sure your drawer content view is aware that the bottom 20pts will be offscreen.

Important: PulleyViewController is not accessible as a parent or as self.pulleyViewController until during or after -viewWillAppear: if you're loading Pulley from Storyboards.

iOS 11, Safe Areas, and the iPhone X

Pulley has support for safe areas and the iPhone X. The sample project includes full support for this, and does a couple of UI tricks to make things look better. These are documented throughout the sample project.

The basic concepts of using Pulley post-iOS 11 are:

  1. The -topInset property is from the top safe area, not the top of the screen.
  2. Most delegate methods have a new parameter that tells you the current bottom safe area.
  3. The drawer itself doesn't do anything special for the bottom safe area because everyone's UI will want to treat it a little differently. HOWEVER: The delegate methods have been updated to deliver you the current bottom safe area anytime that a value for a drawer position is requested from you. You can use this variable to compute the value you want to return for the drawer position. Checkout the sample project for a simple example on an easy approach to this.
  4. If you have UI bottom safe area customizations that you want to perform, I recommend using the delegate method drawerPositionDidChange(drawer:bottomSafeArea:) to modify your UI based on the value of bottomSafeArea. Any time the size of the Pulley view controller changes, this method will be called with a new bottom safe area height. The sample project uses this to modify the drawer 'header' height, as well as to adjust the contentInset for the UITableView. It's not automatically taken care of for you, but it should be a fairly simple thing to add.
  5. I do not recommend constraining views to the safe are of the drawer content view controller. It won't actually work for the safe areas.
  6. If you want the map (or other UI) in the primary view controller to render under the status bar (or in the ears of the iPhone X), make sure you constrain it directly to the superview's 'top'. You may need to double click on the constraint, and then make sure it isn't constrained 'relative to margin'.
  7. For backwards compatibility, iOS 9/10 use topLayoutGuide as the top safe area. Your implementation shouldn't need to worry about iOS versions, as that's taken care of for you by Pulley.

If you have any problems / questions while updating Pulley to iOS 11 SDK, please feel free to create an issue if the above information didn't solve your problem.

Even if you've already seen the example project, I highly encourage looking at the new post-iOS 11 version of the sample project. It may have something that could help your iPhone X / safe area implementation.

3 protocols exist for you to use:

  • PulleyDelegate: The protocol the other protocols inherit from. It's exposed as the .delegate property of PulleyViewController. NOTE: If the object you're wanting to receive delegate callbacks is either the Primary Content or Drawer Content view controllers...don't use the .delegate property. Continue reading for the other protocols.
  • PulleyDrawerViewControllerDelegate: Includes all of the methods from PulleyDelegate and adds methods for providing custom heights for the Collapsed and Partially Revealed states. Your Drawer Content view controller should implement this protocol if it wants to receive callbacks for changes in the drawer state or to provide custom heights for the aforementioned drawer states. Implementing this protocol is optional for the Drawer Content view controller, but if you don't then defaults will be used instead.
  • PulleyPrimaryContentControllerDelegate: This is currently identical to PulleyDelegate. However, this protocol may be implemented by your Primary Content view controller if you want to receive callbacks for changes in drawer state. Eventually specialized methods may be added to this protocol.

Changing view controllers after creation:

You'll likely need to change out the contents of the drawer or the primary view controller after creation. Here's how to do that programmatically.

NOTE: If you pass animated: true then you'll get a subtle crossfade animation. This doesn't work well with all views / view hierarchies (Notably UIVisualEffectView). You've been warned.

Changing the Primary Content View Controller:

if let drawer = self.parentViewController as? PulleyViewController
{
    let primaryContent = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("PrimaryContentViewController")

    drawer.setPrimaryContentViewController(primaryContent, animated: true)
}      

Changing the Drawer Content View Controller:

if let drawer = self.parentViewController as? PulleyViewController
{
    let drawerContent = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DrawerContentViewController")

    drawer.setDrawerContentViewController(drawerContent, animated: false)
}      

Customizing the drawer

  1. See the 3 protocols above.
  2. You can adjust the inset from the top of the screen in the "Open" state by setting the -topInset property on the PulleyViewController.
  3. You can enable / disable drawer positions by implementing PulleyDrawerViewControllerDelegate in your 'drawer' view controller. If you need to change it, call setNeedsSupportedDrawerPositionsUpdate() on the PulleyViewController so it will recalculate the drawer based on your new settings.
  4. You can adjust the corner radius applied to the drawer by setting the -drawerCornerRadius property on the PulleyViewController.
  5. You can adjust the shadow opacity applied to the drawer by setting the -shadowOpacity property on the PulleyViewController.
  6. You can adjust the shadow radius applied to the drawer by setting the -shadowRadius property on the PulleyViewController.
  7. You can adjust the background dimming color by setting the -backgroundDimmingColor to an opaque color on the PulleyViewController.
  8. You can adjust / remove the background blur effect by setting the -drawerBackgroundVisualEffectView property on the PulleyViewController.
  9. You can adjust the alpha of the background dimming color by setting the -backgroundDimmingOpacity property on the PulleyViewController.
  10. You can change the drawer position by calling setDrawerPosition( : ) on the PulleyViewController.
  11. If an object needs to receive delegate callbacks and isn't one of the view controller's presented then you can use the -delegate property on the PulleyViewController.
  12. The Swift Interface for PulleyViewController is documented in case you want to see real documentation instead of a numbered list of useful things.
  13. You can set the initial drawer position by using the initialDrawerPosition property on the PulleyViewController.
  14. Most settings for the PulleyViewController are exposed in Interface Builder. Select the PulleyViewController View Controller (not the view) to access them via IBInspectable.
  15. By default, Pulley will only use the 'bottom' display mode (to preserve backwards compatibility). If you want to use the iPad / iPhone landscape modes, you can use 'panel' for the display mode. If you want it to automatically switch like Maps.app on iOS, you can set the display mode to 'automatic'.
  16. You can apply a custom mask to the Pulley drawer by setting your drawerViewController's view.layer.mask property to a CAShapeLayer. That mask will also be applied to the drawer in Pulley.
  17. You can specify which corner you'd like the panel to display in (when in 'panel' displayMode) by using the 'panelCornerPlacement` property.

Requirements

  • iOS 9.0+
  • Swift 4.0+
Comments
  • Is there any way of preventing the drawer from jumping on load?

    Is there any way of preventing the drawer from jumping on load?

    When first initializing the drawer, it seems everything is being animated from the top left of the screen into position. Is there any way of preventing this?

    Proposed Fix Available 
    opened by cyrilzakka 26
  • Using Pulley with pre-existing, complex view controllers

    Using Pulley with pre-existing, complex view controllers

    Hello!

    We are a fairly complex application looking to incorporate Pulley into our MapBox view controller and a form of a pin detail view controller. I'm having issues setting up Pulley into our system without re-making our layouts. I'm sure I'm just missing something basic but instead of taking hours and hours trying to debug, I thought I'd go straight to the source. I can't share code due to non-disclosure stuff so I'm wondering if I could get some sample code as to how one might use pre-made UIViewControllers with Pulley.

    Thanks!

    help wanted 
    opened by Zacharyg88 23
  • Bug with Shadow/Dimming View when not using `PulleyPosition.all`

    Bug with Shadow/Dimming View when not using `PulleyPosition.all`

    First off, thanks for the great library.

    I've run into a bug where the shadow/dimming view is off if you aren't returning PulleyPosition.all for supportedDrawerPositions().

    This can easily be reproduced in the sample project by just making this change in the DrawerContentViewController

     func supportedDrawerPositions() -> [PulleyPosition] {
            //return PulleyPosition.all // You can specify the drawer positions you support. This is the same as: [.open, .partiallyRevealed, .collapsed, .closed]
            return [.open, .partiallyRevealed, .closed]
        }
    

    I need this specifically because the collapsed context doesn't make sense in my app.

    I haven't had the chance to dig in and try to figure out the bug yet, but wanted to get a issue filed in case someone can fix it quickly.

    Screenshot of the sample app included:

    simulator screen shot - iphone x - 2018-02-01 at 15 58 48

    opened by kcharwood 21
  • Unnecessary Animation

    Unnecessary Animation

    Hi there, I've just implemented your library in my app and i have a TabBarController. I set initialDrawerPosition to "closed" (from IB) and on load it works fine, the drawer is closed, but when i start switching tabs and return to the tab with Pulley, i always see a closing animation. If i set other initialDrawerPosition like "partiallyrevealed" and do the same procedure there is no animation at all as it supposed to be. Am i missing something? Thanks!

    opened by eitanaviv 17
  • NavController issue and switching to normal VC

    NavController issue and switching to normal VC

    Hello, in the picture below you can see how I build up the drawer content in the storyboard. What you can't see is that the pulleyVC is also embed in a tabbarcontroller.

    bildschirmfoto 2017-08-19 um 00 26 55

    I have now 2 problems with the results of this, I don't know how to fix.

    1. When i embed the DrawerContentVC in a NavigationController, the collapsedDrawerHight function doesn't work anymore. I did set the value for the collapsed Hight to 120. Without the NavController it works like it should.
    2. By clicking a cell from the Table View of the DrawerContentVC the second View (BarDetailVC) is opening up inside the drawer. But I want the other VC to be not presented inside the pulleyVC but as a normal View. At the same time it's important that the tabbar at the bottom doesn't disappear when going to the second VC.
    opened by alpa99 17
  • need help on pathing variables

    need help on pathing variables

    I am trying to path a variable from my view controller to pulley. I managed to pass it to PulleyViewController using prepareForSegue method. but I cant understand how to pass it to PrimaryViewController and DrawerViewController. Can you please help me? Thanks

    help wanted 
    opened by almazini 16
  • Rotation causes viewdidlayoutsubviews to fire repeatedly, creating a glitch when panning

    Rotation causes viewdidlayoutsubviews to fire repeatedly, creating a glitch when panning

    I have an app that is only used in portrait mode, with the only allowed drawer positions as [.partiallyRevealed, .open]. When I slightly rotate the device while panning, even though the interface stays in portrait, the PulleyViewController's viewDidLayoutSubviews is called which triggers setDrawerPosition on line 914 of PulleyViewController.swift. If I am in the middle of opening the drawer, it resets to the bottom during the pan, creating a glitch in the scroll.

    opened by ksinghal 14
  • Adjust Physics of Drawer

    Adjust Physics of Drawer

    Hey guys, really awesome work with Pulley! You saved me a lot of time and effort. This framework is incredibly customizable and powerful, but there's a few other tweaks I feel it could use that would go a long way.

    The drawer is just a tad too heavy to move; I'd love to be able to adjust the sensitivity based on the number of points the drawer is moved. DrawerKit has a great setting around this with values called lowerMarkGap and upperMarkGap. This creates a "band" above and below the current position, and when crossed, the drawer changes. Even just a basic enum to adjust sensitivity (e.g. .heavy, .light) would be appreciated!

    The other small change would be adjusting the speed of using setDrawerPosition. I use a tap gesture to trigger drawer position changes, and would appreciate some control in using this function.

    I may dig into the framework and make a fork for the project with values that work a better, but abstracting these options would go a long way into making this even more powerful! Thanks again.

    enhancement 
    opened by mattbarker016 13
  • how do you access the IBOutlets in PulleyViewController when its in the framework

    how do you access the IBOutlets in PulleyViewController when its in the framework

    I see in the example you connect IBOutlets to use Pulley in a storyboard. However, we don't subclass this, and if I just have embedded the framework, the PulleyViewController.swift is not accessible. So how would I connect the outlet to the storyboard?

    opened by MadeByDouglas 12
  • Drawer margin

    Drawer margin

    I've not been able to find any property that allows me to set the drawer magin to the content viewcontroller's border.

    Right now the design Im trying to accomplish is the following:

    screen shot 2018-05-24 at 22 07 31

    Any guidance will be highly appreciated

    opened by sadanro100 12
  • Content doesn't immediately scroll when pulled to 100%

    Content doesn't immediately scroll when pulled to 100%

    Unlike the Apple Maps sheet when pulling on the content in Pully and reaching the top of the screen the content doesn't automatically start scrolling instead you have to lift your finger and then scroll again.

    In the video below what you don't see is that in Pully I had to release my finder and start a new gesture to get the content scrolling when pulled to 100% whereas in iOS Maps you don't which makes more sense as you're already making a scrolling gesture to reveal more content the scroll view is just an extension of that.

    ezgif com-optimize

    wontfix 
    opened by cameroncooke 12
  • I hope there are more convenient functions, such as the function of directly displaying the QR code

    I hope there are more convenient functions, such as the function of directly displaying the QR code

    Describe the question A clear and concise question about the functionality of pulley or a delegate method.

    Code snippets and helpful information Any code snippets, screenshots, recordings, or any other helpful information for addressing your question.

    Pulley Information (optional):

    • Version: [e.g. 2.8.5]
    • Any customizations or tweaks: [e.g. Yes/No]
    • Did you Subclass: [e.g. Yes/No]

    Xcode Information (optional):

    • Version: [e.g. 12]
    • Installation: [e.g. Cocoapods]
    • Interface Builder: [e.g. Yes/No]
    question 
    opened by phonefixnicole 0
  • Delete .swift-version

    Delete .swift-version

    Description

    Hello. I deleted .swift-version file because it is deprecated.

    Type of change

    • [x] Improvement.

    How Has This Been Tested?

    • [x] Test iOS 15

    Test Configuration

    • Xcode Versions: Xcode 14.0
    • Simulators: iPhone 8
    • Physical Hardware: iPhone 7

    Checklist:

    • [x] My code follows the style guidelines of this project
    • [x] My code does not break backwards compatibility with earlier versions of PulleyLib
    • [x] My code is fully functional with all supported device sizes and orientations
    • [x] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [x] I have checked that my code does not break the behavior of the Sample/Demo app
    • [ ] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    • [x] I have tested and can prove my fix is effective or that my feature works
    opened by SabinaHuseinova 0
  • Strange lines on mac catalyst 16

    Strange lines on mac catalyst 16

    Describe the bug A clear and concise description of what the bug is.

    On Mac catalyst 16, lines delimiting the view appear (see capture). Previously (on mac catalyst 15) it never appeared.

    Screenshot 2022-10-25 at 08 24 31

    Pulley (please complete the following information):

    • Version: 2.9.1

    Xcode (please complete the following information):

    • Version: Xcode 14.0.1 (14A400)
    • Interface Builder: Yes

    iOS Devices (please complete the following information):

    • Device: Mac
    • OS: macOS
    • Version Ventura 13.0
    • Simulator: N/A
    bug 
    opened by michael-mansour 0
  • [QUESTION] How to control bounce of pulley when it is used in UITabBarController

    [QUESTION] How to control bounce of pulley when it is used in UITabBarController

    Describe the question A subclass of PulleyViewController is being used as a top view controller for one of the tab of a UITabBarController. A subsequent screen as a result of a button tap on top view controller opens up with PulleyPosition as .open. This results in new screen appearing with a bounce going past the top edge of the device / simulator. What we can do to reduce the bouncing of view controller such that it should bounce but it do not extend top edge and should remain within it ?

    Pulley Information (optional):

    • Version: 2.8.3
    • Any customizations or tweaks: No
    • Did you Subclass: Yes

    Xcode Information (optional):

    • Version: 13.2.1
    • Installation: Cocoapods
    • Interface Builder: No
    question 
    opened by parvez-keeptruckin 0
  • Pulley drawer dimming view appears after UINavigationViewController push new viewController

    Pulley drawer dimming view appears after UINavigationViewController push new viewController

    I created a small public project where we can clearly see that bug https://github.com/BGLv/PulleyDimmingViewBug

    https://user-images.githubusercontent.com/22197990/146005651-9479f2fc-2b03-4204-9f06-d5491bf7e44b.mp4

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            guard let windowScene = (scene as? UIWindowScene) else { return }
            let window = UIWindow(windowScene: windowScene)
            let mainVC = MainViewController()
            let pulleyVC = PulleyViewController(contentViewController: mainVC,
                                                drawerViewController: UIViewController())
            pulleyVC.initialDrawerPosition = .closed
            let navigationVC = UINavigationController(rootViewController: pulleyVC)
            mainVC.onNextButtonPressed = { [weak navigationVC] in
                let nextVC = UIViewController()
                nextVC.view.backgroundColor = .blue
                navigationVC?.pushViewController(nextVC, animated: true)
            }
            self.window = window
            window.rootViewController = navigationVC
            window.makeKeyAndVisible()
        }
    
    bug 
    opened by BGLv 0
  • Open other controller within Drawer

    Open other controller within Drawer

    Hello, I implemented Pulley programmatically. It works as intended. Passing data via protocol. The drawer display data in a tableView. I d like to open another controller to display other data or have other interaction. But I dont want to open as a modal controller. I want to have it inside the drawer so I still can move the drawer up and down to continue seeing the map I have in the main controller.

    Any tip on how to implement this , thank you for your help

    question 
    opened by RaphaelLesourd 0
Releases(2.9.1)
Owner
52inc
Awesome software developers
52inc
UI Component. This is a copy swipe-panel from app: Apple Maps, Stocks. Swift version

ContainerController UI Component. This is a copy swipe-panel from app: https://www.apple.com/ios/maps/ Preview Requirements Installation CocoaPods Swi

Rustam 419 Dec 12, 2022
A SwiftUI bottom-up controller, like in the Maps app. Drag to expand or minimize.

SwiftUI Drawer A SwiftUI bottom-up controller, like in the Maps app. Drag to expand or minimize. Contents Add the Package Basic Usage Examples Credits

Michael Verges 695 Jan 3, 2023
DrawerKit lets an UIViewController modally present another UIViewController in a manner similar to the way Apple's Maps app works.

DrawerKit What is DrawerKit? DrawerKit is a custom view controller presentation mimicking the kind of behaviour in the Apple Maps app. It lets any vie

Babylon Health 773 Dec 27, 2022
BulletinBoard is an iOS library that generates and manages contextual cards displayed at the bottom of the screen

BulletinBoard is an iOS library that generates and manages contextual cards displayed at the bottom of the screen. It is especially well

Alexis (Aubry) Akers 5.3k Jan 2, 2023
A library to recreate the iOS Apple Music now playing transition

DeckTransition DeckTransition is an attempt to recreate the card-like transition found in the iOS 10 Apple Music and iMessage apps. Hereʼs a GIF showi

Harshil Shah 2.2k Dec 15, 2022
⚡️ A library of widgets and helpers to build instant-search applications on iOS.

By Algolia. InstantSearch family: InstantSearch iOS | InstantSearch Android | React InstantSearch | InstantSearch.js | Angular InstantSearch | Vue Ins

Algolia 567 Dec 20, 2022
Non-intrusive iOS UI library to implement overlay based interfaces

OverlayContainer is a UI library written in Swift. It makes easier to develop overlay based interfaces, such as the one presented in the Apple Maps, S

Applidium 1k Jan 4, 2023
An iOS Library that makes shadows management easy on UIView.

ShadowView is an iOS Shadow library that makes view's shadow implementation easy and sweet ?? ?? . Add simple shadows to add a gaussian blurred projec

Pierre 404 Dec 8, 2022
StarryStars is iOS GUI library for displaying and editing ratings

StarryStars StarryStars is iOS GUI library for displaying and editing ratings Features StarryStars' RatingView is both IBDesignable and IBInspectable

Peter Prokop 175 Nov 19, 2022
A nice iOS View Capture Swift Library which can capture all content.

SwViewCapture A nice iOS View Capture Library which can capture all content. SwViewCapture could convert all content of UIWebView to a UIImage. 一个用起来还

Xing Chen 597 Nov 22, 2022
User Interface Library for iOS

Why Sejima Because in modern mobile applications, you often reuse user interface components. To avoid code duplication, we have tried to provide you w

Move Upwards 64 Dec 22, 2022
A minimalistic looking banner library for iOS. It supports multiple customizable kinds of Banner types

A minimalistic looking banner library for iOS. It supports multiple customizable kinds of Banner types

Emre Armagan 12 Oct 10, 2022
:octocat:💧 A slider widget with a popup bubble displaying the precise value selected. Swift UI library made by @Ramotion

FLUID SLIDER A slider widget with a popup bubble displaying the precise value selected written on Swift. We specialize in the designing and coding of

Ramotion 1.9k Dec 23, 2022
A library, which adds the ability to hide navigation bar when view controller is pushed via hidesNavigationBarWhenPushed flag

HidesNavigationBarWhenPushed A library, which adds the ability to hide navigation bar when view controller is pushed via hidesNavigationBarWhenPushed

Danil Gontovnik 55 Oct 19, 2022
A drop-in universal library helps you to manage the navigation bar styles and makes transition animations smooth between different navigation bar styles

A drop-in universal library helps you to manage the navigation bar styles and makes transition animations smooth between different navigation bar styles while pushing or popping a view controller for all orientations. And you don't need to write any line of code for it, it all happens automatically.

Zhouqi Mo 3.3k Dec 21, 2022
Powerful and easy-to-use vector graphics Swift library with SVG support

Macaw Powerful and easy-to-use vector graphics Swift library with SVG support We are a development agency building phenomenal apps. What is Macaw? Mac

Exyte 5.9k Jan 1, 2023
A SwiftUI Library for creating resizable partitions for View Content.

Partition Kit Recently Featured In Top 10 Trending Android and iOS Libraries in October and in 5 iOS libraries to enhance your app! What is PartitionK

Kieran Brown 230 Oct 27, 2022
Lightweight touch visualization library in Swift. A single line of code and visualize your touches!

TouchVisualizer is a lightweight pure Swift implementation for visualising touches on the screen. Features Works with just a single line of code! Supp

Morita Naoki 851 Dec 17, 2022