Skip to content

Wrapper of a UIStackView for posting and removing messages.

License

Notifications You must be signed in to change notification settings

3sidedcube/MessageStackView

Repository files navigation

Example

This is an example of posting a message from the top of the window:

UIApplication.shared.postView.post(badgeMessage:
    BadgeMessage(
        title: "This is a window notification",
        subtitle: "This notification has been posted on the key window",
        image: UIImage(named: "donations"),
        fillColor: .red
    )
)

Alt Text

  1. The BadgeMessage model defines what the message should look like
  2. A BadgeMessageView is created with properties defined by the BadgeMessage
  3. The BadgeMessageView is posted on a PostView on the keyWindow

This PostView adds and removes itself from the keyWindow dynamically based on what is in its queue. See the Example project for more on what this framework can do!

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. To integrate MessageStackView into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'MessageStackView', :git => 'https://github.com/3sidedcube/MessageStackView.git', :tag ~> '3.0.0'

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate MessageStackView into your Xcode project using Carthage, specify it in your Cartfile:

github "3sidedcube/MessageStackView" ~> 3.0.0

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. To integrate MessageStackView into your project using Swift Package Manager, specify it in the dependencies of your Package.swift:

dependencies: [
    .package(url: "https://github.com/3sidedcube/MessageStackView.git", .upToNextMajor(from: "3.0.0"))
]

Core Entities

PostManager

Encaspsulates the logic of when and how UIViews should be posted and removed.

Internally PostManager handles:

  1. Dismissal Timers which, after a given time, request to remove a previously posted UIView
  2. A PostGestureManager for gesture related dismissals, e.g. pan.
  3. Serial Queue if required

UIViewPoster

While PostManager handles the logic of when to post and remove a UIView, UIViewPoster handles the actual posting and subviews. Specifically, adding and removing the subview to the subview hierarchy, and animating when required.

PostManager references a UIViewPoster communicating when to post and remove. There are a few common implementations of UIViewPoster provided in this framwork.

PostView

A UIView for posting other UIViews in a serial manner. The animation of posted UIViews is via a translation from the top.

Commonly, PostView is constrained to the top, leading, trailing edges of a UIView e.g. UIWindow. When a subview is posted, the PostView constrains its edges to the added subview. So, in this case, a posted UIView would define its height either intrinsically or via explicit constraints, with its width determined by the PostView.

MessageStackView

A simple wrapper of a vertical UIStackView for posting and removing UIViews. These UIViews, being a UIStackView, are part of the arrangedSubviews. The animation of posted UIViews is handled via the UIStackView by setting isHidden.

Models

Message

Properties include:

  1. title - required
  2. subtitle - Optional
  3. leftImage - Optional
  4. rightImage - Optional

A Message describes how a MessageView should look, which is the view which is posted on the UIViewPoster.

BadgeMessage

BadgeMessage is similar to Message with an updated design and interface.

Other

MessageStackView + Custom View

The posted UIViews width will be determined by the UIStackView as the distribution is fill and the UIStackView axis is .vertical.
However the height of the UIView is driven by the UIView itself, e.g. autolayout.

If, when posting and removing this UIView from the MessageStackView you want the animation to be smooth, then consider a "breakable" constraint for the height. Since the UIStackView will animate the isHidden property on the UIView, which will set an explict height during animation.

About

Wrapper of a UIStackView for posting and removing messages.

Resources

License

Stars

Watchers

Forks

Packages

No packages published