Git Product home page Git Product logo

mumer92 / jdstatusbarnotification Goto Github PK

View Code? Open in Web Editor NEW

This project forked from calimarkus/jdstatusbarnotification

0.0 0.0 0.0 1.77 MB

Highly customizable & feature rich notifications displayed below the status bar. iOS 13+. Swift ready!

Home Page: http://calimarkus.github.io/JDStatusBarNotification/documentation/jdstatusbarnotification

License: MIT License

Ruby 0.82% Objective-C 65.85% Swift 33.33%

jdstatusbarnotification's Introduction

JDStatusBarNotification

Highly customizable & feature rich notifications displayed below the status bar. Customizable colors, fonts & animations. Supports notch and no-notch devices, landscape & portrait layouts and Drag-to-Dismiss. Can display a subtitle, an activity indicator, a progress bar & custom views out of the box. iOS 13+. Swift ready!

Please open a Github issue, if you think anything is missing or wrong.

Here's some examples of the possibilities (the pill style is the default):

examples

Full-Width styles in action (the pill styles support the same features / animations):

Drag to dismiss Activity & Progress Bars Custom styles
1 3 2
Landscape apps (device rotation also supported)
landscape

Installation

  • SwiftPM:
    • Xcode -> File -> Add packages: [email protected]:calimarkus/JDStatusBarNotification.git
  • CocoaPods:
    • pod 'JDStatusBarNotification'
  • Carthage:
    • github "calimarkus/JDStatusBarNotification"
  • Manually:
    • Copy the JDStatusBarNotification/JDStatusBarNotification folder into your project.

Documentation

Find the class documentation hosted on Github.

Changelog

See CHANGELOG.md

Getting started

NotificationPresenter is a singleton. You don't need to initialize it anywhere. All examples are Swift code, but the class can be used in Objective-C as well. Also checkout the example project, which has many examples and includes a convenient style editor.

Here's some usage examples:

Showing a text notification

It's as simple as this:

NotificationPresenter.shared().present(text: "Hello World")

// with completion
NotificationPresenter.shared().present(text: "Hello World") { presenter in
   // ...
}

Dismissing a notification

NotificationPresenter.shared().dismiss(animated: true)

// with completion
NotificationPresenter.shared().dismiss(afterDelay: 0.5) { presenter in
   // ...
}

Showing activity

activity

NotificationPresenter.shared().present(text: "")
NotificationPresenter.shared().displayActivityIndicator(true)

Showing a custom left view

leftview

let image = UIImageView(image: UIImage(systemName: "gamecontroller.fill"))
NotificationPresenter.shared().present(title: "Player II", subtitle: "Connected")
NotificationPresenter.shared().displayLeftView(image)

Showing progress

progress

NotificationPresenter.shared().present(text: "Animating Progress…") { presenter in
  presenter.animateProgressBar(toPercentage: 1.0, animationDuration: 0.75) { presenter in
    presenter.dismiss()
  }
}

// or set an explicit percentage manually (without animation)
NotificationPresenter.shared().displayProgressBar(percentage: 0.0)

Using other included styles

There's a few included styles you can easily use with the following API:

itworks

NotificationPresenter.shared().present(text: "Yay, it works!", includedStyle: .success)

Using a custom UIView

If you want full control over the notification content and styling, you can use your own custom UIView.

customView customView2

// present a custom view
let button = UIButton(type: .system, primaryAction: UIAction { _ in
  NotificationPresenter.shared().dismiss()
})
button.setTitle("Dismiss!", for: .normal)
NotificationPresenter.shared().present(customView: button)

Customization

You have the option to easily create & use fully customized styles.

The closures of updateDefaultStyle() and addStyle(styleName: String) provide a copy of the default style, which can then be modified. See the JDStatusBarStyle class documentation for all options.

// update default style
NotificationPresenter.shared().updateDefaultStyle { style in
   style.backgroundStyle.backgroundColor = .red
   style.textStyle.textColor = .white
   style.textStyle.font = UIFont.preferredFont(forTextStyle: .title3)
   // and many more options
   return style
}

// set a named custom style
NotificationPresenter.shared().addStyle(styleName: "xxx") { style in
   // ...
   return style
}

Style Editor

Or checkout the example project, which contains a full style editor. You can tweak all customization options within the app, see the changes live and even export the configuration code for the newly created style to easily use it in your app.

style-editor

Background Styles

There's two supported background styles:

/// The background is a floating pill around the text. The pill size and appearance can be customized. This is the default.
StatusBarNotificationBackgroundType.pill
/// The background covers the full display width and the full status bar + navbar height.
StatusBarNotificationBackgroundType.fullWidth

Animation Types

The supported animation types:

/// Slide in from the top of the screen and slide back out to the top. This is the default.
StatusBarNotificationAnimationType.move,
/// Fade-in and fade-out in place. No movement animation.
StatusBarNotificationAnimationType.fade,
/// Fall down from the top and bounce a little bit, before coming to a rest. Slides back out to the top.
StatusBarNotificationAnimationType.bounce,

Troubleshooting

No notifications are showing up

If your app uses a UIWindowScene the NotificationPresenter needs to know about it before you present any notifications. The library attempts to find the correct WindowScene automatically, but that might fail. If it fails no notifications will show up at all. You can explicitly set the window scene to resolve this:

NotificationPresenter.shared().setWindowScene(windowScene)

Twitter

I'm @calimarkus on Twitter. Feel free to post a tweet, if you like JDStatusBarNotification.

tweetbutton

Credits

Originally based on KGStatusBar by Kevin Gibbon

jdstatusbarnotification's People

Contributors

alphatroya avatar calimarkus avatar codeblooded avatar danylokos avatar iwasrobbed avatar k06a avatar kaspik avatar kevingibbon avatar kwigginton avatar mattinasi avatar nicorichard avatar podkovyrin avatar pronebird avatar readmecritic avatar ricardopereira avatar robertbiehl avatar vfuc avatar zhuli8com avatar zskamljic avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.