Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Notification Banner

VersionPlatformLanguage: SwiftLicense

Written in Swift 3

NotificationBanner is an extremely customizable and lightweight library that makes the task of displaying in app notification banners and drop down alerts an absolute breeze in iOS.

Basic BannersBanners with Side ViewsStatus Bar Banners
Basic BannersBanners with Side ViewsStatus Bar Banners

Features

  • Highly customizable ✅
  • NSAttributedString support ✅
  • iPhone & iPad Support ✅
  • Orientation change support ✅
  • Custom UIView support ✅
  • Custom colors support ✅
  • Scrolling label support for banners with long titles/subtitles ✅
  • Presenting from top or bottom support ✅
  • Haptic feeback support ✅
  • Built in banner queue ✅

Requirements

  • iOS 9.0+
  • Xcode 8.1+

Installation

CocoaPods

NotificationBanner is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'NotificationBannerSwift'

Then add import NotificationBannerSwift at the top of each file you use NotificationBanner in your project.

Carthage

To use NotificationBanner via Carthage simply add this line to your Cartfile:

github "Daltron/NotificationBanner"~>1.4.0

Then add NotificationBanner.framework and the dependencies SnapKit.framework and MarqueeLabelSwift.framework in your project.

Usage

Creating drop down alerts with NotificationBanner is easy. To create and show a banner, simply:

letbanner=NotificationBanner(title: title, subtitle: subtitle, style:.success)
banner.show()

To create a status bar alert, simply:

letbanner=StatusBarNotificationBanner(title: title, style:.success)
banner.show()

By default, each banner will be displayed on the main application window. If you are wanting to show a banner below a navigation bar, simply show on the view controller that is within the navigation system:

banner.show(on: viewController)

By default, each banner will present from the top. If you are wanting to display from the bottom, simply:

banner.show(bannerPosition:.bottom)

Each of the show properties defined above can be mixed and matched to work flawlessly with eachother.

By default, each banner will automatically dismiss after 5 seconds. To dismiss programatically, simply:

banner.dismiss()

To show a banner infinitely until it is manually dismissed, simply:

banner.autoDimiss =false

NotificationBanner has five prebuilt styles that you can choose from:

publicenumBannerStyle{case danger
case info
case none
case success
case warning
}

You can override the predefined colors that NotificationBanner uses for any style by conforming to the BannerColorsProtocol:

publicprotocolBannerColorsProtocol{func color(for style:BannerStyle)->UIColor}

Its as easy as creating a custom banner colors class:

classCustomBannerColors:BannerColorsProtocol{internaloverridefunc color(for style:BannerStyle)->UIColor{switch style {case.danger: // Your custom .danger color
case .info: // Your custom .info color
case.none: // Your custom .none color
case .success: // Your custom .success color
case.warning: // Your custom .warning color
}}}

And then passing in that class to any notification banner you create:

letbanner=NotificationBanner(title: title, style:.success, colors:CustomBannerColors())
banner.show()

By default, the .info style will be applied to the banner if no style is provided in the init method. You can set the background color of a banner at any time by simply setting the backgroundColor.

Banners with Side Views

A notification banner can have a left acessory view, a right acessory view, or both:

// Success Style Notification with Left View
letleftView=UIImageView(image: #imageLiteral(resourceName:"success"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, style:.success)
banner.show()
// Danger Style Notification with Right View
letrightView=UIImageView(image: #imageLiteral(resourceName:"danger"))letbanner=NotificationBanner(title: title, subtitle: subtitle, rightView: rightView, style:.danger)
banner.show() // Info Style Notification with Left and Right Views
letleftView=UIImageView(image: #imageLiteral(resourceName:"info"))letrightView=UIImageView(image: #imageLiteral(resourceName:"right_chevron"))letbanner=NotificationBanner(title: title, subtitle: subtitle, leftView: leftView, rightView: rightView, style:.info)
banner.show()

Banners with Side Views

Each side view will be automically reisized to fit perfectly

Banners with a Custom View

A notification banner can also be initalized with a custom view:

letbanner=NotificationBanner(customView:NorthCarolinaBannerView())
banner.show()

Custom Banner

Handling User Interaction

By default, when a banner is tapped or swiped up by a user, it will be dismissed. If you want to detect when the user taps or swipes up on a banner, simply:

banner.onTap ={
// Do something regarding the banner
}
banner.onSwipeUp ={
// Do something regarding the banner
}

Banner Events

You can choose to opt into a notification banner's events by registering as its delegate:

banner.delegate =self

Then just make sure to implement the following methods:

internalfunc notificationBannerWillAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidAppear(_ banner:BaseNotificationBanner)
internal func notificationBannerWillDisappear(_ banner:BaseNotificationBanner)
internal func notificationBannerDidDisappear(_ banner:BaseNotificationBanner)

Haptic Feedback Support

By default, when a banner is displayed, a haptic feedback will be generated on devices that support it. The types of haptic feedback are as follows:

publicenumBannerHaptic{case light
case medium
case heavy
case none
}

To change the type of haptic feedback to generate when a banner is shown, simply:

banner.haptic =.heavy

Banner Queue

By default, each notification banner is placed onto a NotificationBannerQueue. This allows an infinite amount of banners to be de displayed without one hiding the other. By default, each notification banner is placed on the back of the queue. If you would rather place the banner in the front and show it immediately no matter how many banners are in the queue, simply state it in the show() method:

banner.show(queuePosition:.front)

Adding a banner to the front of the queue will temporarily suspend the currently displayed banner (if there is one) and will resume it after the banner in front of it dismisses.

To get the number of banners currently on the queue, simply:

letnumberOfBanners=NotificationBannerQueue.default.numberOfBanners

This is all automatically managed!

Feature Requests

I'd love to know anything that you think NotificationBanner is missing. Open an issue and I'll add the feature request label to it and I'll do everything I can to accomodate that request if it is in the library's best interest. 😄

Apps that Use NotificationBanner

Q - Talk About MusicVH Dispatch

Feel free to add yours!

Author

Dalton Hinterscher, daltonhint4@gmail.com

License

NotificationBanner is available under the MIT license. See the LICENSE file for more info.

About

The easiest way to display highly customizable in app notification banners in iOS

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages